time.js (1803B)
1 // |reftest| skip-if(!this.hasOwnProperty("Temporal")||!this.hasOwnProperty("Intl")) 2 3 // Test Temporal types which can produce time formats. 4 5 const locales = [ 6 "en", 7 "de", 8 "fr", 9 "es", 10 "ar", 11 "th", 12 "zh", 13 "ja", 14 ]; 15 16 const options = [ 17 { 18 hour: "2-digit", 19 minute: "numeric", 20 second: "numeric", 21 fractionalSecondDigits: 3, 22 }, 23 { 24 hour: "numeric", 25 minute: "numeric", 26 second: "numeric", 27 }, 28 { 29 hour: "numeric", 30 minute: "numeric", 31 }, 32 33 { 34 dayPeriod: "long", 35 hour: "numeric", 36 minute: "numeric", 37 second: "numeric", 38 fractionalSecondDigits: 3, 39 }, 40 { 41 dayPeriod: "long", 42 hour: "numeric", 43 minute: "numeric", 44 second: "numeric", 45 }, 46 { 47 dayPeriod: "short", 48 hour: "2-digit", 49 minute: "numeric", 50 }, 51 { 52 dayPeriod: "narrow", 53 hour: "numeric", 54 }, 55 56 { 57 minute: "2-digit", 58 second: "2-digit", 59 }, 60 ]; 61 62 const timeZone = "UTC"; 63 64 let date = new Date(0); 65 let instant = date.toTemporalInstant(); 66 let zonedDateTime = instant.toZonedDateTimeISO(timeZone); 67 let plainDateTime = zonedDateTime.toPlainDateTime(); 68 let plainTime = zonedDateTime.toPlainTime(); 69 70 for (let locale of locales) { 71 let expected = date.toLocaleTimeString(locale, {timeZone}); 72 assertEq(plainTime.toLocaleString(locale, {timeZone}), expected); 73 74 for (let opts of options) { 75 let expected = date.toLocaleTimeString(locale, {timeZone, ...opts}); 76 assertEq(instant.toLocaleString(locale, {timeZone, ...opts}), expected); 77 assertEq(zonedDateTime.toLocaleString(locale, {...opts}), expected); 78 assertEq(plainDateTime.toLocaleString(locale, {timeZone, ...opts}), expected); 79 assertEq(plainTime.toLocaleString(locale, {timeZone, ...opts}), expected); 80 } 81 } 82 83 if (typeof reportCompare === "function") 84 reportCompare(true, true);