// |reftest| shell-option(--enable-temporal) skip-if(!this.hasOwnProperty("Temporal")||!this.hasOwnProperty("Intl"))
// Test "dateStyle" and "timeStyle" with Temporal types.
const locales = [
"en",
"de",
"fr",
"es",
"ar",
"th",
"zh",
"ja",
];
const dateStyles = [
"full",
"long",
"medium",
"short"
];
const timeStyles = [
"full",
"long",
"medium",
"short"
];
const timeZone =
"UTC";
let date =
new Date(0);
let instant = date.toTemporalInstant();
let zonedDateTime = instant.toZonedDateTimeISO(timeZone);
let plainDateTime = zonedDateTime.toPlainDateTime();
let plainDate = zonedDateTime.toPlainDate();
let plainTime = zonedDateTime.toPlainTime();
// let calendarDate = plainDate.withCalendar(calendar);
// let calendarYearMonth = calendarDate.toPlainYearMonth();
// let calendarMonthDay = calendarDate.toPlainMonthDay();
function assertNe(actual, expected) {
assertEq(Object.is(actual, expected),
false);
}
for (let locale of locales) {
for (let dateStyle of dateStyles) {
let expected = date.toLocaleDateString(locale, {timeZone, dateStyle});
assertEq(instant.toLocaleString(locale, {timeZone, dateStyle}), expected);
assertEq(zonedDateTime.toLocaleString(locale, {dateStyle}), expected);
// https://github.com/tc39/proposal-temporal/issues/3062
if (
(locale ===
"zh" && (dateStyle ===
"long" || dateStyle ===
"medium")) ||
(locale ===
"ja" && (dateStyle ===
"full" || dateStyle ===
"long"))
) {
assertNe(plainDateTime.toLocaleString(locale, {timeZone, dateStyle}), expected);
assertNe(plainDate.toLocaleString(locale, {timeZone, dateStyle}), expected);
continue;
}
assertEq(plainDateTime.toLocaleString(locale, {timeZone, dateStyle}), expected);
assertEq(plainDate.toLocaleString(locale, {timeZone, dateStyle}), expected);
}
for (let timeStyle of timeStyles) {
let expected = date.toLocaleTimeString(locale, {timeZone, timeStyle});
assertEq(instant.toLocaleString(locale, {timeZone, timeStyle}), expected);
assertEq(zonedDateTime.toLocaleString(locale, {timeStyle}), expected);
// "full" and "long" time style include time zone names, which aren't used
// by Temporal.PlainDateTime and Temporal.PlainTime.
if (timeStyle !==
"full" && timeStyle !==
"long") {
assertEq(plainDateTime.toLocaleString(locale, {timeZone, timeStyle}), expected);
assertEq(plainTime.toLocaleString(locale, {timeZone, timeStyle}), expected);
}
}
for (let dateStyle of dateStyles) {
for (let timeStyle of timeStyles) {
let expected = date.toLocaleString(locale, {timeZone, dateStyle, timeStyle});
assertEq(instant.toLocaleString(locale, {timeZone, dateStyle, timeStyle}), expected)
;
assertEq(zonedDateTime.toLocaleString(locale, {dateStyle, timeStyle}), expected);
// "full" and "long" time style include time zone names, which aren't used
// by Temporal.PlainDateTime and Temporal.PlainTime.
if (timeStyle !== "full" && timeStyle !== "long") {
// https://github.com/tc39/proposal-temporal/issues/3062
if (
(locale === "zh" && (dateStyle === "long" || dateStyle === "medium")) ||
(locale === "ja" && (dateStyle === "full" || dateStyle === "long"))
) {
assertNe(plainDateTime.toLocaleString(locale, {timeZone, dateStyle, timeStyle}), expected);
continue;
}
assertEq(plainDateTime.toLocaleString(locale, {timeZone, dateStyle, timeStyle}), expected);
}
}
}
}
if (typeof reportCompare === "function")
reportCompare(true, true);