time-zones-posix.js (5840B)
1 // |reftest| skip-if(winWidget&&!xulRuntime.shell) -- Windows browser in automation doesn't pick up new time zones correctly 2 3 // Repeats the test from "time-zones.js", but uses POSIX instead of IANA names 4 // for the time zones. This allows to run these tests on Windows, too. 5 6 // From bug 1330149: 7 // 8 // Windows only supports a very limited set of IANA time zone names for the TZ 9 // environment variable. 10 // 11 // TZ format supported by Windows: "TZ=tzn[+|-]hh[:mm[:ss]][dzn]". 12 // 13 // Complete list of all IANA time zone ids matching that format. 14 // 15 // From tzdata's "northamerica" file: 16 // EST5EDT 17 // CST6CDT 18 // MST7MDT 19 // PST8PDT 20 // 21 // From tzdata's "backward" file: 22 // GMT+0 23 // GMT-0 24 // GMT0 25 // 26 // Also supported on Windows even though they don't match the format listed 27 // above. 28 // 29 // From tzdata's "backward" file: 30 // UCT 31 // UTC 32 // 33 // From tzdata's "etcetera" file: 34 // GMT 35 36 37 // Perform the following replacements: 38 // America/New_York -> EST5EDT 39 // America/Chicago -> CST6CDT 40 // America/Denver -> MST7MDT 41 // America/Los_Angeles -> PST8PDT 42 // 43 // And remove any tests not matching one of the four time zones from above. 44 45 // bug 294908 46 inTimeZone("EST5EDT", () => { 47 let dt = new Date(2003, Month.April, 6, 2, 30, 00); 48 assertDateTime(dt, "Sun Apr 06 2003 03:30:00 GMT-0400 (EDT)", "Eastern Daylight Time"); 49 }); 50 51 // bug 610183 52 inTimeZone("PST8PDT", () => { 53 let dt = new Date(2014, Month.November, 2, 1, 47, 42); 54 assertDateTime(dt, "Sun Nov 02 2014 01:47:42 GMT-0700 (PDT)", "Pacific Daylight Time"); 55 }); 56 57 // bug 629465 58 inTimeZone("MST7MDT", () => { 59 let dt1 = new Date(Date.UTC(2015, Month.November, 1, 0, 0, 0) + 6 * msPerHour); 60 assertDateTime(dt1, "Sun Nov 01 2015 00:00:00 GMT-0600 (MDT)", "Mountain Daylight Time"); 61 62 let dt2 = new Date(Date.UTC(2015, Month.November, 1, 1, 0, 0) + 6 * msPerHour); 63 assertDateTime(dt2, "Sun Nov 01 2015 01:00:00 GMT-0600 (MDT)", "Mountain Daylight Time"); 64 65 let dt3 = new Date(Date.UTC(2015, Month.November, 1, 1, 0, 0) + 7 * msPerHour); 66 assertDateTime(dt3, "Sun Nov 01 2015 01:00:00 GMT-0700 (MST)", "Mountain Standard Time"); 67 }); 68 69 // bug 742427 70 inTimeZone("EST5EDT", () => { 71 let dt = new Date(2009, Month.March, 8, 1, 0, 0); 72 assertDateTime(dt, "Sun Mar 08 2009 01:00:00 GMT-0500 (EST)", "Eastern Standard Time"); 73 dt.setHours(dt.getHours() + 1); 74 assertDateTime(dt, "Sun Mar 08 2009 03:00:00 GMT-0400 (EDT)", "Eastern Daylight Time"); 75 }); 76 inTimeZone("MST7MDT", () => { 77 let dt = new Date(2009, Month.March, 8, 1, 0, 0); 78 assertDateTime(dt, "Sun Mar 08 2009 01:00:00 GMT-0700 (MST)", "Mountain Standard Time"); 79 dt.setHours(dt.getHours() + 1); 80 assertDateTime(dt, "Sun Mar 08 2009 03:00:00 GMT-0600 (MDT)", "Mountain Daylight Time"); 81 }); 82 inTimeZone("EST5EDT", () => { 83 let dt1 = new Date(Date.UTC(2008, Month.March, 9, 0, 0, 0) + 5 * msPerHour); 84 assertDateTime(dt1, "Sun Mar 09 2008 00:00:00 GMT-0500 (EST)", "Eastern Standard Time"); 85 86 let dt2 = new Date(Date.UTC(2008, Month.March, 9, 1, 0, 0) + 5 * msPerHour); 87 assertDateTime(dt2, "Sun Mar 09 2008 01:00:00 GMT-0500 (EST)", "Eastern Standard Time"); 88 89 let dt3 = new Date(Date.UTC(2008, Month.March, 9, 4, 0, 0) + 4 * msPerHour); 90 assertDateTime(dt3, "Sun Mar 09 2008 04:00:00 GMT-0400 (EDT)", "Eastern Daylight Time"); 91 }); 92 93 // bug 802627 94 inTimeZone("EST5EDT", () => { 95 let dt = new Date(0); 96 assertDateTime(dt, "Wed Dec 31 1969 19:00:00 GMT-0500 (EST)", "Eastern Standard Time"); 97 }); 98 99 // bug 879261 100 inTimeZone("EST5EDT", () => { 101 let dt1 = new Date(1362891600000); 102 assertDateTime(dt1, "Sun Mar 10 2013 00:00:00 GMT-0500 (EST)", "Eastern Standard Time"); 103 104 let dt2 = new Date(dt1.setHours(dt1.getHours() + 24)); 105 assertDateTime(dt2, "Mon Mar 11 2013 00:00:00 GMT-0400 (EDT)", "Eastern Daylight Time"); 106 }); 107 inTimeZone("PST8PDT", () => { 108 let dt1 = new Date(2014, Month.January, 1); 109 assertDateTime(dt1, "Wed Jan 01 2014 00:00:00 GMT-0800 (PST)", "Pacific Standard Time"); 110 111 let dt2 = new Date(2014, Month.August, 1); 112 assertDateTime(dt2, "Fri Aug 01 2014 00:00:00 GMT-0700 (PDT)", "Pacific Daylight Time"); 113 }); 114 inTimeZone("EST5EDT", () => { 115 let dt1 = new Date(2016, Month.October, 14, 3, 5, 9); 116 assertDateTime(dt1, "Fri Oct 14 2016 03:05:09 GMT-0400 (EDT)", "Eastern Daylight Time"); 117 118 let dt2 = new Date(2016, Month.January, 9, 23, 26, 40); 119 assertDateTime(dt2, "Sat Jan 09 2016 23:26:40 GMT-0500 (EST)", "Eastern Standard Time"); 120 }); 121 122 // bug 1084547 123 inTimeZone("EST5EDT", () => { 124 let dt = new Date(Date.parse("2014-11-02T02:00:00-04:00")); 125 assertDateTime(dt, "Sun Nov 02 2014 01:00:00 GMT-0500 (EST)", "Eastern Standard Time"); 126 127 dt.setMilliseconds(0); 128 assertDateTime(dt, "Sun Nov 02 2014 01:00:00 GMT-0400 (EDT)", "Eastern Daylight Time"); 129 }); 130 131 // bug 1303306 132 inTimeZone("EST5EDT", () => { 133 let dt = new Date(2016, Month.September, 15, 16, 14, 48); 134 assertDateTime(dt, "Thu Sep 15 2016 16:14:48 GMT-0400 (EDT)", "Eastern Daylight Time"); 135 }); 136 137 // bug 1317364 138 inTimeZone("PST8PDT", () => { 139 let dt = new Date(2016, Month.March, 13, 2, 30, 0, 0); 140 assertDateTime(dt, "Sun Mar 13 2016 03:30:00 GMT-0700 (PDT)", "Pacific Daylight Time"); 141 142 let dt2 = new Date(2016, Month.January, 5, 0, 30, 30, 500); 143 assertDateTime(dt2, "Tue Jan 05 2016 00:30:30 GMT-0800 (PST)", "Pacific Standard Time"); 144 145 let dt3 = new Date(dt2.getTime()); 146 dt3.setMonth(dt2.getMonth() + 2); 147 dt3.setDate(dt2.getDate() + 7 + 1); 148 dt3.setHours(dt2.getHours() + 2); 149 150 assertEq(dt3.getHours(), 3); 151 }); 152 153 // bug 1355272 154 inTimeZone("PST8PDT", () => { 155 let dt = new Date(2017, Month.April, 10, 17, 25, 07); 156 assertDateTime(dt, "Mon Apr 10 2017 17:25:07 GMT-0700 (PDT)", "Pacific Daylight Time"); 157 }); 158 159 if (typeof reportCompare === "function") 160 reportCompare(true, true);