You don't want "every" here - that tests whether every item in a sequence satisfies some condition, returning true if they do.
You want the string-join function:
string-join(block[flag='true']/string-join((start,end)/hours-from-dateTime(xs:dateTime(.)),','),';')
or if you find that too cryptic
string-join(
for $b in block[flag='true']
return string-join(
for $t in (start,end)
return hours-from-dateTime(xs:dateTime(.))
, ',')
, ';')
Michael Kay
http://www.saxonica.com/
Author, XSLT 2.0 and XPath 2.0 Programmer's Reference