blob: ce8c3e3949e0bfca160f73861649e03cf8768c82 [file] [log] [blame]
//@ 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();