Fix #2040: parsing time zone offsets.

There was a bug when parsing positive time zone offsets with a non-zero
number of minutes: the use of Math.floor on negative numbers rounded in
the wrong direction.  Replacing Math.floor with (x | 0) correctly
truncates positive and negative values.