| //@ skip if ["arm", "mips"].include?($architecture) # Due to ICU version. |
| |
| function shouldBe(actual, expected) { |
| if (actual !== expected) |
| throw new Error('bad value: ' + actual); |
| } |
| |
| function shouldThrow(func, errorMessage) { |
| var errorThrown = false; |
| var error = null; |
| try { |
| func(); |
| } catch (e) { |
| errorThrown = true; |
| error = e; |
| } |
| if (!errorThrown) |
| throw new Error('not thrown'); |
| if (String(error) !== errorMessage) |
| throw new Error(`bad error: ${String(error)}`); |
| } |
| |
| let fmt0 = new Intl.DateTimeFormat("en", { |
| year: '2-digit', |
| month: 'numeric', |
| day: 'numeric', |
| hour: 'numeric', |
| minute: 'numeric', |
| timeZone: 'America/Los_Angeles', |
| }); |
| |
| shouldThrow(() => { |
| fmt0.formatRange(); |
| }, `TypeError: startDate or endDate is undefined`); |
| |
| shouldThrow(() => { |
| fmt0.formatRange(new Date(Date.UTC(2008, 0, 20, 10, 0, 0)), new Date(Date.UTC(2007, 0, 10, 10, 0, 0))); |
| }, `RangeError: startDate is larger than endDate`); |
| |
| function test() { |
| let range = " – "; |
| if ($vm.icuVersion() >= 67 || $vm.icuVersion() === 65) |
| range = " – "; |
| |
| let date1 = new Date(Date.UTC(2007, 0, 10, 10, 0, 0)); |
| let date2 = new Date(Date.UTC(2007, 0, 10, 11, 0, 0)); |
| let date3 = new Date(Date.UTC(2007, 0, 20, 10, 0, 0)); |
| let date4 = new Date(Date.UTC(2008, 0, 20, 10, 0, 0)); |
| |
| { |
| let fmt1 = new Intl.DateTimeFormat("en", { |
| year: '2-digit', |
| month: 'numeric', |
| day: 'numeric', |
| hour: 'numeric', |
| minute: 'numeric', |
| timeZone: 'America/Los_Angeles', |
| }); |
| shouldBe(fmt1.format(date1), `1/10/07, 2:00 AM`); |
| shouldBe(fmt1.formatRange(date1, date1), `1/10/07, 2:00 AM`); |
| shouldBe(fmt1.formatRange(date1, date2), `1/10/07, 2:00${range}3:00 AM`); |
| shouldBe(fmt1.formatRange(date1, date3), `1/10/07, 2:00 AM${range}1/20/07, 2:00 AM`); |
| } |
| |
| { |
| let fmt1 = new Intl.DateTimeFormat("en", { |
| year: '2-digit', |
| month: 'numeric', |
| day: 'numeric', |
| timeZone: 'America/Los_Angeles', |
| }); |
| shouldBe(fmt1.format(date1), `1/10/07`); |
| shouldBe(fmt1.formatRange(date1, date1), `1/10/07`); |
| shouldBe(fmt1.formatRange(date1, date2), `1/10/07`); |
| shouldBe(fmt1.formatRange(date1, date3), `1/10/07${range}1/20/07`); |
| } |
| |
| |
| { |
| let fmt1 = new Intl.DateTimeFormat("en", { |
| year: 'numeric', |
| timeZone: 'America/Los_Angeles', |
| }); |
| shouldBe(fmt1.format(date1), `2007`); |
| shouldBe(fmt1.formatRange(date1, date1), `2007`); |
| shouldBe(fmt1.formatRange(date1, date2), `2007`); |
| shouldBe(fmt1.formatRange(date1, date4), `2007${range}2008`); |
| } |
| |
| { |
| let fmt1 = new Intl.DateTimeFormat("en", { |
| year: '2-digit', |
| month: 'numeric', |
| day: 'numeric', |
| hour: 'numeric', |
| minute: 'numeric', |
| timeZone: 'UTC', |
| }); |
| shouldBe(fmt1.format(date1), `1/10/07, 10:00 AM`); |
| shouldBe(fmt1.formatRange(date1, date1), `1/10/07, 10:00 AM`); |
| shouldBe(fmt1.formatRange(date1, date2), `1/10/07, 10:00${range}11:00 AM`); |
| shouldBe(fmt1.formatRange(date1, date3), `1/10/07, 10:00 AM${range}1/20/07, 10:00 AM`); |
| } |
| |
| { |
| let fmt2 = new Intl.DateTimeFormat("en", { |
| year: 'numeric', |
| month: 'short', |
| day: 'numeric', |
| timeZone: 'America/Los_Angeles', |
| }); |
| shouldBe(fmt2.format(date1), `Jan 10, 2007`); |
| shouldBe(fmt2.formatRange(date1, date1), `Jan 10, 2007`); |
| shouldBe(fmt2.formatRange(date1, date2), `Jan 10, 2007`); |
| shouldBe(fmt2.formatRange(date1, date3), `Jan 10${range}20, 2007`); |
| } |
| { |
| const date1 = new Date("2019-01-03T00:00:00"); |
| const date2 = new Date("2019-01-05T00:00:00"); |
| const date3 = new Date("2019-03-04T00:00:00"); |
| const date4 = new Date("2020-03-04T00:00:00"); |
| |
| let dtf = new Intl.DateTimeFormat("en-US"); |
| shouldBe(dtf.formatRange(date1, date1), "1/3/2019"); |
| shouldBe(dtf.formatRange(date1, date2), `1/3/2019${range}1/5/2019`); |
| shouldBe(dtf.formatRange(date1, date3), `1/3/2019${range}3/4/2019`); |
| shouldBe(dtf.formatRange(date1, date4), `1/3/2019${range}3/4/2020`); |
| shouldBe(dtf.formatRange(date2, date3), `1/5/2019${range}3/4/2019`); |
| shouldBe(dtf.formatRange(date2, date4), `1/5/2019${range}3/4/2020`); |
| shouldBe(dtf.formatRange(date3, date4), `3/4/2019${range}3/4/2020`); |
| |
| dtf = new Intl.DateTimeFormat("en-US", {year: "numeric", month: "short", day: "numeric"}); |
| shouldBe(dtf.formatRange(date1, date1), `Jan 3, 2019`); |
| shouldBe(dtf.formatRange(date1, date2), `Jan 3${range}5, 2019`); |
| shouldBe(dtf.formatRange(date1, date3), `Jan 3${range}Mar 4, 2019`); |
| shouldBe(dtf.formatRange(date1, date4), `Jan 3, 2019${range}Mar 4, 2020`); |
| shouldBe(dtf.formatRange(date2, date3), `Jan 5${range}Mar 4, 2019`); |
| shouldBe(dtf.formatRange(date2, date4), `Jan 5, 2019${range}Mar 4, 2020`); |
| shouldBe(dtf.formatRange(date3, date4), `Mar 4, 2019${range}Mar 4, 2020`); |
| } |
| } |
| |
| if (Intl.DateTimeFormat.prototype.formatRange) |
| test(); |