time-zones-historic.js (21855B)
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 // bug 487897 4 inTimeZone("Europe/London", () => { 5 let dt1 = new Date(1970, Month.January, 1, 0, 0, 0, 0); 6 assertDateTime(dt1, "Thu Jan 01 1970 00:00:00 GMT+0100 (Greenwich Mean Time)"); 7 assertEq(dt1.getHours(), 0); 8 9 let dt2 = new Date(1915, Month.January, 1); 10 assertDateTime(dt2, "Fri Jan 01 1915 00:00:00 GMT+0000 (Greenwich Mean Time)"); 11 12 let dt3 = new Date(1970, Month.January, 1); 13 assertDateTime(dt3, "Thu Jan 01 1970 00:00:00 GMT+0100 (Greenwich Mean Time)"); 14 }); 15 16 // bug 637244 17 inTimeZone("Asia/Novosibirsk", () => { 18 let dt1 = new Date("1942-03-01T00:00:00"); 19 assertDateTime(dt1, "Sun Mar 01 1942 00:00:00 GMT+0700 (Krasnoyarsk Standard Time)"); 20 dt1.setMonth(Month.April); 21 assertDateTime(dt1, "Wed Apr 01 1942 00:00:00 GMT+0700 (Krasnoyarsk Standard Time)"); 22 23 let dt2 = new Date(2010, Month.October, 31); 24 assertDateTime(dt2, "Sun Oct 31 2010 00:00:00 GMT+0700 (Krasnoyarsk Summer Time)"); 25 dt2.setMonth(Month.November); 26 assertDateTime(dt2, "Wed Dec 01 2010 00:00:00 GMT+0600 (Krasnoyarsk Standard Time)"); 27 28 let dt3 = new Date(1942, Month.April, 1); 29 assertDateTime(dt3, "Wed Apr 01 1942 00:00:00 GMT+0700 (Krasnoyarsk Standard Time)"); 30 31 function getNumberOfDaysInMonth(year, month) { 32 switch (month) { 33 case Month.January: 34 case Month.March: 35 case Month.May: 36 case Month.July: 37 case Month.August: 38 case Month.October: 39 case Month.December: 40 return 31; 41 case Month.April: 42 case Month.June: 43 case Month.September: 44 case Month.November: 45 return 30; 46 case Month.February: 47 if (year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0)) 48 return 29; 49 return 28; 50 } 51 throw new Error(`Illegal month value: ${month}`); 52 } 53 54 for (let year = 1900; year <= 2142; ++year) { 55 for (let month = Month.January; month <= Month.December; ++month) { 56 const numDays = getNumberOfDaysInMonth(year, month); 57 for (let day = 1; day <= numDays; ++day) { 58 let date = new Date(year, month, day); 59 assertEq(date.getMonth(), month); 60 } 61 } 62 } 63 64 let dt4 = new Date(1984, Month.April, 1); 65 assertDateTime(dt4, "Sun Apr 01 1984 01:00:00 GMT+0800 (Krasnoyarsk Summer Time)"); 66 67 let dt5 = new Date(1984, Month.March, 1); 68 assertDateTime(dt5, "Thu Mar 01 1984 00:00:00 GMT+0700 (Krasnoyarsk Standard Time)"); 69 70 let dt6 = new Date(1984, Month.April, 1); 71 assertEq(dt6.toUTCString(), "Sat, 31 Mar 1984 17:00:00 GMT"); 72 assertEq(dt6.getTime(), 449600400000); 73 }); 74 inTimeZone("Europe/Tallinn", () => { 75 let dt = new Date(2040, Month.March, 31, 20); 76 77 for (let {datetime, date, hours} of [ 78 {datetime: "Sat Mar 31 2040 20:00:00", date: 31, hours: 20}, 79 {datetime: "Sat Mar 31 2040 22:00:00", date: 31, hours: 22}, 80 {datetime: "Sun Apr 01 2040 00:00:00", date: 1, hours: 0}, 81 {datetime: "Sun Apr 01 2040 02:00:00", date: 1, hours: 2}, 82 {datetime: "Sun Apr 01 2040 04:00:00", date: 1, hours: 4}, 83 {datetime: "Sun Apr 01 2040 06:00:00", date: 1, hours: 6}, 84 {datetime: "Sun Apr 01 2040 08:00:00", date: 1, hours: 8}, 85 ]) { 86 assertDateTime(dt, `${datetime} GMT+0300 (Eastern European Summer Time)`); 87 assertEq(dt.getDate(), date); 88 assertEq(dt.getHours(), hours); 89 assertEq(dt.getTimezoneOffset(), -180); 90 91 dt.setHours(dt.getHours() + 2); 92 } 93 }); 94 inTimeZone("Europe/Riga", () => { 95 let dt1 = new Date(2016, Month.March, 27, 2, 59); 96 assertDateTime(dt1, "Sun Mar 27 2016 02:59:00 GMT+0200 (Eastern European Standard Time)"); 97 98 let dt2 = new Date(2016, Month.March, 27, 3, 0); 99 assertDateTime(dt2, "Sun Mar 27 2016 04:00:00 GMT+0300 (Eastern European Summer Time)"); 100 }); 101 102 // bug 704486 103 inTimeZone("Europe/Zagreb", () => { 104 let dt = new Date(Date.UTC(1942, Month.June, 11, 22, 0, 0, 0)); 105 assertDateTime(dt, "Fri Jun 12 1942 00:00:00 GMT+0200 (Central European Summer Time)"); 106 assertEq(dt.getFullYear(), 1942); 107 assertEq(dt.getMonth(), Month.June); 108 assertEq(dt.getDate(), 12); 109 assertEq(dt.getHours(), 0); 110 assertEq(dt.getMinutes(), 0); 111 assertEq(dt.getSeconds(), 0); 112 assertEq(dt.getMilliseconds(), 0); 113 assertEq(dt.getTimezoneOffset(), -120); 114 }); 115 116 // bug 935909 117 inTimeZone("Europe/London", () => { 118 let dt1 = new Date(1954, Month.January, 1); 119 assertDateTime(dt1, "Fri Jan 01 1954 00:00:00 GMT+0000 (Greenwich Mean Time)"); 120 121 let dt2 = new Date(1965, Month.January, 1); 122 assertDateTime(dt2, "Fri Jan 01 1965 00:00:00 GMT+0000 (Greenwich Mean Time)"); 123 124 let dt3 = new Date(1970, Month.January, 1); 125 assertDateTime(dt3, "Thu Jan 01 1970 00:00:00 GMT+0100 (Greenwich Mean Time)"); 126 127 let dt4 = new Date(-504921600000); 128 assertDateTime(dt4, "Fri Jan 01 1954 00:00:00 GMT+0000 (Greenwich Mean Time)"); 129 130 let dt5 = new Date(1974, Month.January, 1); 131 assertDateTime(dt5, "Tue Jan 01 1974 00:00:00 GMT+0000 (Greenwich Mean Time)"); 132 }); 133 inTimeZone("Europe/Dublin", () => { 134 let dt = new Date(0, Month.January, 1, 0, 0, 0, 0); 135 dt.setFullYear(1970); 136 assertEq(dt.getFullYear(), 1970); 137 }); 138 139 // bug 937261 140 inTimeZone("Europe/Lisbon", () => { 141 let dt = new Date(0, Month.January, 1, 0, 0, 0, 0); 142 assertDateTime(dt, "Mon Jan 01 1900 00:00:00 GMT-0036 (Western European Standard Time)"); 143 144 dt.setFullYear(2015); 145 assertDateTime(dt, "Thu Jan 01 2015 00:00:00 GMT+0000 (Western European Standard Time)"); 146 147 dt.setMonth(Month.November); 148 assertDateTime(dt, "Sun Nov 01 2015 00:00:00 GMT+0000 (Western European Standard Time)"); 149 }); 150 inTimeZone("Europe/London", () => { 151 let dt = new Date(0, Month.January, 1, 0, 0, 0, 0); 152 assertDateTime(dt, "Mon Jan 01 1900 00:00:00 GMT+0000 (Greenwich Mean Time)"); 153 154 dt.setFullYear(2015); 155 assertDateTime(dt, "Thu Jan 01 2015 00:00:00 GMT+0000 (Greenwich Mean Time)"); 156 157 dt.setMonth(Month.November); 158 assertDateTime(dt, "Sun Nov 01 2015 00:00:00 GMT+0000 (Greenwich Mean Time)"); 159 }); 160 161 // bug 1079720 162 inTimeZone("Europe/Moscow", () => { 163 let dt1 = new Date(2014, Month.January, 1); 164 assertDateTime(dt1, "Wed Jan 01 2014 00:00:00 GMT+0400 (Moscow Standard Time)"); 165 assertEq(dt1.toISOString(), "2013-12-31T20:00:00.000Z"); 166 assertEq(dt1.getHours(), 0); 167 168 let dt2 = new Date(2013, Month.January, 1); 169 assertDateTime(dt2, "Tue Jan 01 2013 00:00:00 GMT+0400 (Moscow Standard Time)"); 170 171 let dt3 = new Date(new Date(2014, Month.December, 1).setMonth(Month.January)); 172 assertDateTime(dt3, "Wed Jan 01 2014 00:00:00 GMT+0400 (Moscow Standard Time)"); 173 assertEq(dt3.getFullYear(), 2014); 174 175 let dt4 = new Date(2040, Month.April, 1); 176 assertDateTime(dt4, "Sun Apr 01 2040 00:00:00 GMT+0300 (Moscow Standard Time)"); 177 178 let dt5 = new Date(2043, Month.April, 1); 179 assertDateTime(dt5, "Wed Apr 01 2043 00:00:00 GMT+0300 (Moscow Standard Time)"); 180 181 let dt6 = new Date(2054, Month.April, 1); 182 assertDateTime(dt6, "Wed Apr 01 2054 00:00:00 GMT+0300 (Moscow Standard Time)"); 183 184 let dt7 = new Date(2065, Month.April, 1); 185 assertDateTime(dt7, "Wed Apr 01 2065 00:00:00 GMT+0300 (Moscow Standard Time)"); 186 187 let dt8 = new Date(2068, Month.April, 1); 188 assertDateTime(dt8, "Sun Apr 01 2068 00:00:00 GMT+0300 (Moscow Standard Time)"); 189 190 let dt9 = new Date(2071, Month.April, 1); 191 assertDateTime(dt9, "Wed Apr 01 2071 00:00:00 GMT+0300 (Moscow Standard Time)"); 192 193 let dt10 = new Date(2082, Month.April, 1); 194 assertDateTime(dt10, "Wed Apr 01 2082 00:00:00 GMT+0300 (Moscow Standard Time)"); 195 196 let dt11 = new Date(2093, Month.April, 1); 197 assertDateTime(dt11, "Wed Apr 01 2093 00:00:00 GMT+0300 (Moscow Standard Time)"); 198 199 let dt12 = new Date(2096, Month.April, 1); 200 assertDateTime(dt12, "Sun Apr 01 2096 00:00:00 GMT+0300 (Moscow Standard Time)"); 201 202 let dt13 = new Date(2099, Month.April, 1); 203 assertDateTime(dt13, "Wed Apr 01 2099 00:00:00 GMT+0300 (Moscow Standard Time)"); 204 }); 205 206 // bug 1107837 207 inTimeZone("Europe/Moscow", () => { 208 let dt1 = new Date(2015, Month.January, 4); 209 assertDateTime(dt1, "Sun Jan 04 2015 00:00:00 GMT+0300 (Moscow Standard Time)"); 210 211 let dt2 = new Date(2015, Month.January, 5); 212 assertDateTime(dt2, "Mon Jan 05 2015 00:00:00 GMT+0300 (Moscow Standard Time)"); 213 214 let dt3 = new Date(2015, Month.January, 6); 215 assertDateTime(dt3, "Tue Jan 06 2015 00:00:00 GMT+0300 (Moscow Standard Time)"); 216 217 let dt4 = new Date(2015, Month.January, 7); 218 assertDateTime(dt4, "Wed Jan 07 2015 00:00:00 GMT+0300 (Moscow Standard Time)"); 219 220 let dt5 = new Date(2015, Month.January, 8); 221 assertDateTime(dt5, "Thu Jan 08 2015 00:00:00 GMT+0300 (Moscow Standard Time)"); 222 223 let dt6 = new Date(2015, Month.January, 9); 224 assertDateTime(dt6, "Fri Jan 09 2015 00:00:00 GMT+0300 (Moscow Standard Time)"); 225 }); 226 227 // bug 1122571 228 inTimeZone("Europe/Berlin", () => { 229 const locale = "en-001"; 230 const opts = {timeZoneName: "long", hour12: false}; 231 232 let dt1 = new Date(1950, Month.March, 28); 233 assertDateTime(dt1, "Tue Mar 28 1950 00:00:00 GMT+0100 (Central European Standard Time)"); 234 assertEq(dt1.toLocaleString(locale, opts), "28/03/1950, 00:00:00 GMT+01:00"); 235 236 let dt2 = new Date(1950, Month.July, 1); 237 assertDateTime(dt2, "Sat Jul 01 1950 00:00:00 GMT+0100 (Central European Standard Time)"); 238 assertEq(dt2.toLocaleString(locale, opts), "01/07/1950, 00:00:00 GMT+01:00"); 239 240 let dt3 = new Date(1960, Month.March, 27); 241 assertDateTime(dt3, "Sun Mar 27 1960 00:00:00 GMT+0100 (Central European Standard Time)"); 242 assertEq(dt3.toLocaleString(locale, opts), "27/03/1960, 00:00:00 GMT+01:00"); 243 244 let dt4 = new Date(1960, Month.March, 28); 245 assertDateTime(dt4, "Mon Mar 28 1960 00:00:00 GMT+0100 (Central European Standard Time)"); 246 assertEq(dt4.toLocaleString(locale, opts), "28/03/1960, 00:00:00 GMT+01:00"); 247 248 let dt5 = new Date(1960, Month.March, 29); 249 assertDateTime(dt5, "Tue Mar 29 1960 00:00:00 GMT+0100 (Central European Standard Time)"); 250 assertEq(dt5.toLocaleString(locale, opts), "29/03/1960, 00:00:00 GMT+01:00"); 251 252 let dt6 = new Date(1960, Month.July, 1); 253 assertDateTime(dt6, "Fri Jul 01 1960 00:00:00 GMT+0100 (Central European Standard Time)"); 254 assertEq(dt6.toLocaleString(locale, opts), "01/07/1960, 00:00:00 GMT+01:00"); 255 256 let dt7 = new Date(1961, Month.July, 1); 257 assertDateTime(dt7, "Sat Jul 01 1961 00:00:00 GMT+0100 (Central European Standard Time)"); 258 assertEq(dt7.toLocaleString(locale, opts), "01/07/1961, 00:00:00 GMT+01:00"); 259 260 let dt8 = new Date(1970, Month.March, 1); 261 assertDateTime(dt8, "Sun Mar 01 1970 00:00:00 GMT+0100 (Central European Standard Time)"); 262 assertEq(dt8.toLocaleString(locale, opts), "01/03/1970, 00:00:00 Central European Standard Time"); 263 264 let dt9 = new Date(1970, Month.March, 27); 265 assertDateTime(dt9, "Fri Mar 27 1970 00:00:00 GMT+0100 (Central European Standard Time)"); 266 assertEq(dt9.toLocaleString(locale, opts), "27/03/1970, 00:00:00 Central European Standard Time"); 267 268 let dt10 = new Date(1970, Month.March, 28); 269 assertDateTime(dt10, "Sat Mar 28 1970 00:00:00 GMT+0100 (Central European Standard Time)"); 270 assertEq(dt10.toLocaleString(locale, opts), "28/03/1970, 00:00:00 Central European Standard Time"); 271 272 let dt11 = new Date(1970, Month.July, 1); 273 assertDateTime(dt11, "Wed Jul 01 1970 00:00:00 GMT+0100 (Central European Standard Time)"); 274 assertEq(dt11.toLocaleString(locale, opts), "01/07/1970, 00:00:00 Central European Standard Time"); 275 }); 276 277 // bug 1143398 278 inTimeZone("Australia/Adelaide", () => { 279 let dt = new Date(621000); 280 assertDateTime(dt, "Thu Jan 01 1970 09:40:21 GMT+0930 (Australian Central Standard Time)"); 281 assertEq(dt.getUTCFullYear(), 1970); 282 283 dt.setMilliseconds(dt.getMilliseconds()); 284 dt.setSeconds(dt.getSeconds()); 285 286 assertDateTime(dt, "Thu Jan 01 1970 09:40:21 GMT+0930 (Australian Central Standard Time)"); 287 assertEq(dt.getUTCFullYear(), 1970); 288 }); 289 inTimeZone("America/Denver", () => { 290 let dt = new Date(1446361200000); 291 assertDateTime(dt, "Sun Nov 01 2015 01:00:00 GMT-0600 (Mountain Daylight Time)"); 292 293 assertEq(dt.getTime(), 1446361200000); 294 dt.setMilliseconds(0); 295 assertEq(dt.getTime(), 1446361200000); 296 }); 297 298 // bug 1233809 299 inTimeZone("America/New_York", () => { 300 let dt = new Date(1980, Month.March, 10); 301 assertDateTime(dt, "Mon Mar 10 1980 00:00:00 GMT-0500 (Eastern Standard Time)"); 302 }); 303 304 // bug 1254041 305 inTimeZone("Asia/Ho_Chi_Minh", () => { 306 let dt1 = new Date(Date.UTC(1969, Month.December, 31, 23, 0)); 307 assertDateTime(dt1, "Thu Jan 01 1970 07:00:00 GMT+0800 (Indochina Time)"); 308 assertEq(dt1.getTime(), -3600000); 309 310 dt1.setMinutes(dt1.getMinutes() + 30); 311 assertDateTime(dt1, "Thu Jan 01 1970 07:30:00 GMT+0800 (Indochina Time)"); 312 assertEq(dt1.getTime(), -1800000); 313 314 dt1.setMinutes(dt1.getMinutes() + 30); 315 assertDateTime(dt1, "Thu Jan 01 1970 08:00:00 GMT+0800 (Indochina Time)"); 316 assertEq(dt1.getTime(), 0); 317 318 dt1.setMinutes(dt1.getMinutes() + 30); 319 assertDateTime(dt1, "Thu Jan 01 1970 08:30:00 GMT+0800 (Indochina Time)"); 320 assertEq(dt1.getTime(), 1800000); 321 322 dt1.setMinutes(dt1.getMinutes() + 30); 323 assertDateTime(dt1, "Thu Jan 01 1970 09:00:00 GMT+0800 (Indochina Time)"); 324 assertEq(dt1.getTime(), 3600000); 325 326 let dt2 = new Date(-1); 327 assertEq(dt2.getTime(), -1); 328 329 dt2.setMilliseconds(dt2.getMilliseconds() + 1); 330 assertEq(dt2.getTime(), 0); 331 332 dt2.setTime(1); 333 assertEq(dt2.getTime(), 1); 334 335 dt2.setMilliseconds(dt2.getMilliseconds() - 1); 336 assertEq(dt2.getTime(), 0); 337 338 dt2.setMilliseconds(dt2.getMilliseconds() - 1); 339 assertEq(dt2.getTime(), -1); 340 341 dt2.setMilliseconds(dt2.getMilliseconds() + 1); 342 assertEq(dt2.getTime(), 0); 343 344 dt2.setMilliseconds(dt2.getMilliseconds() + 3600000); 345 assertEq(dt2.getTime(), 3600000); 346 347 dt2.setMilliseconds(dt2.getMilliseconds() + (3600000 * 2 - 1)); 348 assertEq(dt2.getTime(), 3600000 * 3 - 1); 349 350 dt2.setMilliseconds(dt2.getMilliseconds() + 1); 351 assertEq(dt2.getTime(), 3600000 * 3); 352 353 dt2.setMilliseconds(dt2.getMilliseconds() + (3600000 * 2)); 354 assertEq(dt2.getTime(), 3600000 * 5); 355 356 let dt3 = new Date(0); 357 assertDateTime(dt3, "Thu Jan 01 1970 08:00:00 GMT+0800 (Indochina Time)"); 358 359 let dt4 = new Date(-1); 360 assertDateTime(dt4, "Thu Jan 01 1970 07:59:59 GMT+0800 (Indochina Time)"); 361 }); 362 363 // bug 1300197 364 inTimeZone("Europe/Dublin", () => { 365 let dt = new Date(1910, Month.January, 1); 366 assertDateTime(dt, "Sat Jan 01 1910 00:00:00 GMT-0025 (Greenwich Mean Time)"); 367 }); 368 369 // bug 1304774 370 inTimeZone("Europe/Zurich", () => { 371 let dt = new Date(1986, Month.April, 4, 0, 0, 0, 0); 372 assertDateTime(dt, "Fri Apr 04 1986 00:00:00 GMT+0200 (Central European Summer Time)"); 373 assertEq(dt.getTimezoneOffset(), -120); 374 }); 375 376 // bug 1330307 377 inTimeZone("Europe/Moscow", () => { 378 let dt = new Date(2012, Month.May, 14, 12, 13, 14); 379 assertDateTime(dt, "Mon May 14 2012 12:13:14 GMT+0400 (Moscow Standard Time)"); 380 381 let dtf = new Intl.DateTimeFormat("en-US", {hour: "numeric", minute: "numeric"}); 382 assertEq(dtf.format(dt), "12:13 PM"); 383 }); 384 inTimeZone("Asia/Baku", () => { 385 let dt = new Date(2012, Month.May, 14, 12, 13, 14); 386 assertDateTime(dt, "Mon May 14 2012 12:13:14 GMT+0500 (Azerbaijan Summer Time)"); 387 388 let dtf = new Intl.DateTimeFormat("en-US", {hour: "numeric", minute: "numeric"}); 389 assertEq(dtf.format(dt), "12:13 PM"); 390 }); 391 inTimeZone("Asia/Tbilisi", () => { 392 let dt = new Date(2012, Month.May, 14, 12, 13, 14); 393 assertDateTime(dt, "Mon May 14 2012 12:13:14 GMT+0400 (Georgia Standard Time)"); 394 395 let dtf = new Intl.DateTimeFormat("en-US", {hour: "numeric", minute: "numeric"}); 396 assertEq(dtf.format(dt), "12:13 PM"); 397 }); 398 399 // bug 1335818 400 inTimeZone("Asia/Jerusalem", () => { 401 let dt1 = new Date(2013, Month.March, 22, 1, 0, 0, 0); 402 assertDateTime(dt1, "Fri Mar 22 2013 01:00:00 GMT+0200 (Israel Standard Time)"); 403 404 let dt2 = new Date(2013, Month.March, 22, 2, 0, 0, 0); 405 assertDateTime(dt2, "Fri Mar 22 2013 02:00:00 GMT+0200 (Israel Standard Time)"); 406 407 let dt3 = new Date(2013, Month.March, 22, 3, 0, 0, 0); 408 assertDateTime(dt3, "Fri Mar 22 2013 03:00:00 GMT+0200 (Israel Standard Time)"); 409 410 let dt4 = new Date(2013, Month.March, 29, 1, 0, 0, 0); 411 assertDateTime(dt4, "Fri Mar 29 2013 01:00:00 GMT+0200 (Israel Standard Time)"); 412 413 let dt5 = new Date(2013, Month.March, 29, 2, 0, 0, 0); 414 assertDateTime(dt5, "Fri Mar 29 2013 03:00:00 GMT+0300 (Israel Daylight Time)"); 415 416 let dt6 = new Date(2013, Month.March, 29, 3, 0, 0, 0); 417 assertDateTime(dt6, "Fri Mar 29 2013 03:00:00 GMT+0300 (Israel Daylight Time)"); 418 }); 419 420 // bug 1342853 421 inTimeZone("America/Sao_Paulo", () => { 422 let dt1 = new Date(2017, Month.October, 14, 12, 0, 0); 423 assertDateTime(dt1, "Sat Oct 14 2017 12:00:00 GMT-0300 (Brasilia Standard Time)"); 424 assertEq(dt1.getTimezoneOffset(), 180); 425 426 let dt2 = new Date(2017, Month.October, 15, 12, 0, 0); 427 assertDateTime(dt2, "Sun Oct 15 2017 12:00:00 GMT-0200 (Brasilia Summer Time)"); 428 assertEq(dt2.getTimezoneOffset(), 120); 429 430 let dt3 = new Date(2018, Month.February, 17, 12, 0, 0); 431 assertDateTime(dt3, "Sat Feb 17 2018 12:00:00 GMT-0200 (Brasilia Summer Time)"); 432 assertEq(dt3.getTimezoneOffset(), 120); 433 434 let dt4 = new Date(2018, Month.February, 18, 12, 0, 0); 435 assertDateTime(dt4, "Sun Feb 18 2018 12:00:00 GMT-0300 (Brasilia Standard Time)"); 436 assertEq(dt4.getTimezoneOffset(), 180); 437 438 let dt5 = new Date(2018, Month.November, 3, 12, 0, 0); 439 assertDateTime(dt5, "Sat Nov 03 2018 12:00:00 GMT-0300 (Brasilia Standard Time)"); 440 assertEq(dt5.getTimezoneOffset(), 180); 441 442 let dt6 = new Date(2018, Month.November, 4, 12, 0, 0); 443 assertDateTime(dt6, "Sun Nov 04 2018 12:00:00 GMT-0200 (Brasilia Summer Time)"); 444 assertEq(dt6.getTimezoneOffset(), 120); 445 446 let dt7 = new Date(2019, Month.February, 16, 12, 0, 0); 447 assertDateTime(dt7, "Sat Feb 16 2019 12:00:00 GMT-0200 (Brasilia Summer Time)"); 448 assertEq(dt7.getTimezoneOffset(), 120); 449 450 let dt8 = new Date(2019, Month.February, 17, 12, 0, 0); 451 assertDateTime(dt8, "Sun Feb 17 2019 12:00:00 GMT-0300 (Brasilia Standard Time)"); 452 assertEq(dt8.getTimezoneOffset(), 180); 453 }); 454 455 // bug 1365192 456 inTimeZone("America/Asuncion", () => { 457 let dt = new Date(2018, Month.March, 31); 458 assertDateTime(dt, "Sat Mar 31 2018 00:00:00 GMT-0400 (Paraguay Standard Time)"); 459 assertEq(dt.getTimezoneOffset(), 240); 460 }); 461 462 // bug 1385643 463 inTimeZone("Europe/Warsaw", () => { 464 let shortMonths = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"]; 465 let dtf = new Intl.DateTimeFormat("en-US", {month: "short"}); 466 467 for (let year = 1900; year <= 2100; ++year) { 468 for (let month = Month.January; month <= Month.December; ++month) { 469 let date = new Date(year, month, 1); 470 assertEq(dtf.format(date), shortMonths[month]); 471 } 472 } 473 }); 474 475 // bug 1401696 476 inTimeZone("Europe/Berlin", () => { 477 let dt = new Date(1970, Month.January, 1, 0, 0, 0); 478 assertDateTime(dt, "Thu Jan 01 1970 00:00:00 GMT+0100 (Central European Standard Time)"); 479 }); 480 481 // bug 1459842 482 inTimeZone("Europe/Moscow", () => { 483 let dt1 = new Date(1004, Month.April, 1, 2, 0, 0); 484 assertDateTime(dt1, "Sun Apr 01 1004 02:00:00 GMT+0230 (Moscow Standard Time)"); 485 assertEq(dt1.getHours(), 2); 486 487 let dt2 = new Date(1004, Month.April, 1, 1, 0, 0); 488 assertDateTime(dt2, "Sun Apr 01 1004 01:00:00 GMT+0230 (Moscow Standard Time)"); 489 assertEq(dt2.getHours(), 1); 490 491 let dt3 = new Date(1004, Month.April, 1, 0, 0, 0); 492 assertDateTime(dt3, "Sun Apr 01 1004 00:00:00 GMT+0230 (Moscow Standard Time)"); 493 assertEq(dt3.getHours(), 0); 494 495 let dt4 = new Date(1004, Month.March, 1, 2, 0, 0); 496 assertDateTime(dt4, "Thu Mar 01 1004 02:00:00 GMT+0230 (Moscow Standard Time)"); 497 assertEq(dt4.getHours(), 2); 498 499 let dt5 = new Date(1004, Month.March, 1, 1, 0, 0); 500 assertDateTime(dt5, "Thu Mar 01 1004 01:00:00 GMT+0230 (Moscow Standard Time)"); 501 assertEq(dt5.getHours(), 1); 502 503 let dt6 = new Date(1004, Month.March, 1, 0, 0, 0); 504 assertDateTime(dt6, "Thu Mar 01 1004 00:00:00 GMT+0230 (Moscow Standard Time)"); 505 assertEq(dt6.getHours(), 0); 506 507 }); 508 509 // bug 1799638 510 inTimeZone("Asia/Tokyo", () => { 511 let dt1 = new Date(1948, Month.May, 1, 23, 59, 59); 512 assertDateTime(dt1, "Sat May 01 1948 23:59:59 GMT+0900 (Japan Standard Time)"); 513 assertEq(dt1.getTimezoneOffset(), -540); 514 515 let dt2 = new Date(1948, Month.May, 1, 24, 0, 0); 516 assertDateTime(dt2, "Sun May 02 1948 01:00:00 GMT+1000 (Japan Daylight Time)"); 517 assertEq(dt2.getTimezoneOffset(), -600); 518 519 let dt3 = new Date(1948, Month.May, 1, 23, 59, 59, 1); 520 assertDateTime(dt3, "Sat May 01 1948 23:59:59 GMT+0900 (Japan Standard Time)"); 521 assertEq(dt3.getTimezoneOffset(), -540); 522 }); 523 inTimeZone("America/New_York", () => { 524 let dt1 = new Date(1966, Month.April, 24, 1, 59, 59); 525 assertDateTime(dt1, "Sun Apr 24 1966 01:59:59 GMT-0500 (Eastern Standard Time)"); 526 assertEq(dt1.getTimezoneOffset(), 300); 527 528 let dt2 = new Date(1966, Month.April, 24, 2, 0, 0); 529 assertDateTime(dt2, "Sun Apr 24 1966 03:00:00 GMT-0400 (Eastern Daylight Time)"); 530 assertEq(dt2.getTimezoneOffset(), 240); 531 532 let dt3 = new Date(1966, Month.April, 24, 1, 59, 59, 1); 533 assertDateTime(dt3, "Sun Apr 24 1966 01:59:59 GMT-0500 (Eastern Standard Time)"); 534 assertEq(dt3.getTimezoneOffset(), 300); 535 }); 536 537 if (typeof reportCompare === "function") 538 reportCompare(true, true);