Skip to content

Commit 4b34372

Browse files
committed
Test timepicker.timezoneOffsetString(). Fix lower range issue and simplify formatting of output string by eliminating 'magic' 101 values.
1 parent 7bc2133 commit 4b34372

File tree

2 files changed

+48
-3
lines changed

2 files changed

+48
-3
lines changed

jquery-ui-timepicker-addon.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1915,20 +1915,20 @@
19151915

19161916
/**
19171917
* Get the timezone offset as string from a date object (eg '+0530' for UTC+5.5)
1918-
* @param {number} tzMinutes if not a number this value is returned
1918+
* @param {number} tzMinutes if not a number, less than -720 (-1200), or greater than 840 (+1400) this value is returned
19191919
* @param {boolean} iso8601 if true formats in accordance to iso8601 "+12:45"
19201920
* @return {string}
19211921
*/
19221922
$.timepicker.timezoneOffsetString = function(tzMinutes, iso8601) {
1923-
if(isNaN(tzMinutes) || tzMinutes > 840){
1923+
if(isNaN(tzMinutes) || tzMinutes > 840 || tzMinutes < -720){
19241924
return tzMinutes;
19251925
}
19261926

19271927
var off = tzMinutes,
19281928
minutes = off % 60,
19291929
hours = (off - minutes) / 60,
19301930
iso = iso8601? ':':'',
1931-
tz = (off >= 0 ? '+' : '-') + ('0' + (hours * 101).toString()).slice(-2) + iso + ('0' + (minutes * 101).toString()).slice(-2);
1931+
tz = (off >= 0 ? '+' : '-') + ('0' + Math.abs(hours)).slice(-2) + iso + ('0' + Math.abs(minutes)).slice(-2);
19321932

19331933
if(tz == '+00:00'){
19341934
return 'Z';

test/jquery-ui-timepicker-addon_spec.js

Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,5 +220,50 @@ describe('datetimepicker', function() {
220220
expect($.timepicker.timezoneOffsetNumber('+0400')).toBe(240);
221221
});
222222
});
223+
224+
describe('timezoneOffsetString', function() {
225+
it('returns NaN if the input is NaN', function() {
226+
expect($.timepicker.timezoneOffsetString(NaN)).toBeNaN();
227+
});
228+
229+
it('returns the input if the input is greater than 840 (+14:00)', function() {
230+
var expectedMinutes = 850;
231+
232+
var actualMinutes = $.timepicker.timezoneOffsetString(expectedMinutes);
233+
234+
expect(actualMinutes).toBe(expectedMinutes);
235+
});
236+
237+
it('returns the input if the input is less than -720 (-12:00)', function() {
238+
var expectedMinutes = -730;
239+
240+
var actualMinutes = $.timepicker.timezoneOffsetString(expectedMinutes);
241+
242+
expect(actualMinutes).toBe(expectedMinutes);
243+
});
244+
245+
it('returns "Z" if the offset is 0 and iso8601 is true', function() {
246+
expect($.timepicker.timezoneOffsetString(0, true)).toBe('Z');
247+
});
248+
249+
it('returns the expected offset string for non-iso8601 values', function() {
250+
expect($.timepicker.timezoneOffsetString(0, false)).toBe('+0000');
251+
expect($.timepicker.timezoneOffsetString(60, false)).toBe('+0100');
252+
expect($.timepicker.timezoneOffsetString(480, false)).toBe('+0800');
253+
expect($.timepicker.timezoneOffsetString(-60, false)).toBe('-0100');
254+
expect($.timepicker.timezoneOffsetString(-480, false)).toBe('-0800');
255+
expect($.timepicker.timezoneOffsetString(-720, false)).toBe('-1200');
256+
expect($.timepicker.timezoneOffsetString(840, false)).toBe('+1400');
257+
});
258+
259+
it('returns the expected offset string for iso8601 values', function() {
260+
expect($.timepicker.timezoneOffsetString(60, true)).toBe('+01:00');
261+
expect($.timepicker.timezoneOffsetString(480, true)).toBe('+08:00');
262+
expect($.timepicker.timezoneOffsetString(-60, true)).toBe('-01:00');
263+
expect($.timepicker.timezoneOffsetString(-480, true)).toBe('-08:00');
264+
expect($.timepicker.timezoneOffsetString(-720, true)).toBe('-12:00');
265+
expect($.timepicker.timezoneOffsetString(840, true)).toBe('+14:00');
266+
});
267+
});
223268
});
224269
});

0 commit comments

Comments
 (0)