time-zones-limits.js (2525B)
1 // |reftest| skip-if(winWidget||!this.hasOwnProperty("Intl")) -- Windows doesn't accept IANA names for the TZ env variable; Requires ICU time zone support 2 3 // Create dates at the minimum and maximum allowed time values. Ensure the same 4 // result is returned if the input is a UTC value and if the inputs are individual 5 // date-time parts. 6 7 const MinTime = -8640000000000000; 8 const MaxTime = 8640000000000000; 9 10 function dateFromParts(dt) { 11 return new Date( 12 dt.getFullYear(), 13 dt.getMonth(), 14 dt.getDate(), 15 dt.getHours(), 16 dt.getMinutes(), 17 dt.getSeconds(), 18 dt.getMilliseconds() 19 ); 20 } 21 22 inTimeZone("America/Los_Angeles", () => { 23 let dtMin = new Date(MinTime); 24 assertDateTime(dtMin, "Mon Apr 19 -271821 16:07:02 GMT-0752 (Pacific Standard Time)"); 25 assertEq(dtMin.getTimezoneOffset(), 472.96666666666664); 26 assertEq(dtMin.getTime(), MinTime); 27 28 let dtMin2 = dateFromParts(dtMin); 29 assertDateTime(dtMin2, "Mon Apr 19 -271821 16:07:02 GMT-0752 (Pacific Standard Time)"); 30 assertEq(dtMin2.getTimezoneOffset(), 472.96666666666664); 31 assertEq(dtMin2.getTime(), MinTime); 32 33 let dtMax = new Date(MaxTime); 34 assertDateTime(dtMax, "Fri Sep 12 275760 17:00:00 GMT-0700 (Pacific Daylight Time)"); 35 assertEq(dtMax.getTimezoneOffset(), 420); 36 assertEq(dtMax.getTime(), MaxTime); 37 38 let dtMax2 = dateFromParts(dtMax); 39 assertDateTime(dtMax2, "Fri Sep 12 275760 17:00:00 GMT-0700 (Pacific Daylight Time)"); 40 assertEq(dtMax2.getTimezoneOffset(), 420); 41 assertEq(dtMax2.getTime(), MaxTime); 42 }); 43 44 inTimeZone("Europe/Berlin", () => { 45 let dtMin = new Date(MinTime); 46 assertDateTime(dtMin, "Tue Apr 20 -271821 00:53:28 GMT+0053 (Central European Standard Time)"); 47 assertEq(dtMin.getTimezoneOffset(), -53.46666666666667); 48 assertEq(dtMin.getTime(), MinTime); 49 50 let dtMin2 = dateFromParts(dtMin); 51 assertDateTime(dtMin2, "Tue Apr 20 -271821 00:53:28 GMT+0053 (Central European Standard Time)"); 52 assertEq(dtMin2.getTimezoneOffset(), -53.46666666666667); 53 assertEq(dtMin2.getTime(), MinTime); 54 55 let dtMax = new Date(MaxTime); 56 assertDateTime(dtMax, "Sat Sep 13 275760 02:00:00 GMT+0200 (Central European Summer Time)"); 57 assertEq(dtMax.getTimezoneOffset(), -120); 58 assertEq(dtMax.getTime(), MaxTime); 59 60 let dtMax2 = dateFromParts(dtMax); 61 assertDateTime(dtMax2, "Sat Sep 13 275760 02:00:00 GMT+0200 (Central European Summer Time)"); 62 assertEq(dtMax2.getTimezoneOffset(), -120); 63 assertEq(dtMax2.getTime(), MaxTime); 64 }); 65 66 if (typeof reportCompare === "function") 67 reportCompare(true, true);