tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

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);