era-boundary-japanese.js (10184B)
1 // |reftest| skip-if(!this.hasOwnProperty('Temporal')) -- Temporal is not enabled unconditionally 2 // Copyright (C) 2025 Igalia, S.L. All rights reserved. 3 // This code is governed by the BSD license found in the LICENSE file. 4 5 /*--- 6 esid: sec-temporal.zoneddatetime.from 7 description: > 8 Dates in same year or years before era starts should resolve to previous era 9 (Japanese calendar) 10 includes: [temporalHelpers.js] 11 features: [Temporal, Intl.Era-monthcode] 12 ---*/ 13 14 const calendar = "japanese"; 15 const options = { overflow: "reject" }; 16 17 const reiwa1BeforeStart = Temporal.ZonedDateTime.from({ era: "reiwa", eraYear: 1, monthCode: "M04", day: 30, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 18 TemporalHelpers.assertPlainDateTime( 19 reiwa1BeforeStart.toPlainDateTime(), 20 2019, 4, "M04", 30, 12, 34, 0, 0, 0, 0, "Reiwa 1 resolves to Heisei 31 before era start date", 21 "heisei", 31); 22 23 const reiwa0 = Temporal.ZonedDateTime.from({ era: "reiwa", eraYear: 0, monthCode: "M05", day: 1, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 24 TemporalHelpers.assertPlainDateTime( 25 reiwa0.toPlainDateTime(), 26 2018, 5, "M05", 1, 12, 34, 0, 0, 0, 0, "Reiwa 0 resolves to Heisei 30", 27 "heisei", 30); 28 29 const reiwa1n = Temporal.ZonedDateTime.from({ era: "reiwa", eraYear: -1, monthCode: "M05", day: 1, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 30 TemporalHelpers.assertPlainDateTime( 31 reiwa1n.toPlainDateTime(), 32 2017, 5, "M05", 1, 12, 34, 0, 0, 0, 0, "Reiwa -1 resolves to Heisei 29", 33 "heisei", 29); 34 35 const heisei31AfterStart = Temporal.ZonedDateTime.from({ era: "heisei", eraYear: 31, monthCode: "M05", day: 1, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 36 TemporalHelpers.assertPlainDateTime( 37 heisei31AfterStart.toPlainDateTime(), 38 2019, 5, "M05", 1, 12, 34, 0, 0, 0, 0, "Heisei 31 resolves to Reiwa 1 after era start date", 39 "reiwa", 1); 40 41 const heisei1BeforeStart = Temporal.ZonedDateTime.from({ era: "heisei", eraYear: 1, monthCode: "M01", day: 7, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 42 TemporalHelpers.assertPlainDateTime( 43 heisei1BeforeStart.toPlainDateTime(), 44 1989, 1, "M01", 7, 12, 34, 0, 0, 0, 0, "Heisei 1 resolves to Showa 64 before era start date", 45 "showa", 64); 46 47 const heisei0 = Temporal.ZonedDateTime.from({ era: "heisei", eraYear: 0, monthCode: "M01", day: 8, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 48 TemporalHelpers.assertPlainDateTime( 49 heisei0.toPlainDateTime(), 50 1988, 1, "M01", 8, 12, 34, 0, 0, 0, 0, "Heisei 0 resolves to Showa 63", 51 "showa", 63); 52 53 const heisei1n = Temporal.ZonedDateTime.from({ era: "heisei", eraYear: -1, monthCode: "M01", day: 8, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 54 TemporalHelpers.assertPlainDateTime( 55 heisei1n.toPlainDateTime(), 56 1987, 1, "M01", 8, 12, 34, 0, 0, 0, 0, "Heisei -1 resolves to Showa 62", 57 "showa", 62); 58 59 const showa64AfterStart = Temporal.ZonedDateTime.from({ era: "showa", eraYear: 64, monthCode: "M01", day: 8, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 60 TemporalHelpers.assertPlainDateTime( 61 showa64AfterStart.toPlainDateTime(), 62 1989, 1, "M01", 8, 12, 34, 0, 0, 0, 0, "Showa 64 resolves to Heisei 1 after era start date", 63 "heisei", 1); 64 65 const showa1BeforeStart = Temporal.ZonedDateTime.from({ era: "showa", eraYear: 1, monthCode: "M12", day: 24, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 66 TemporalHelpers.assertPlainDateTime( 67 showa1BeforeStart.toPlainDateTime(), 68 1926, 12, "M12", 24, 12, 34, 0, 0, 0, 0, "Showa 1 resolves to Taisho 15 before era start date", 69 "taisho", 15); 70 71 const showa0 = Temporal.ZonedDateTime.from({ era: "showa", eraYear: 0, monthCode: "M12", day: 25, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 72 TemporalHelpers.assertPlainDateTime( 73 showa0.toPlainDateTime(), 74 1925, 12, "M12", 25, 12, 34, 0, 0, 0, 0, "Showa 0 resolves to Taisho 14", 75 "taisho", 14); 76 77 const showa1n = Temporal.ZonedDateTime.from({ era: "showa", eraYear: -1, monthCode: "M12", day: 25, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 78 TemporalHelpers.assertPlainDateTime( 79 showa1n.toPlainDateTime(), 80 1924, 12, "M12", 25, 12, 34, 0, 0, 0, 0, "Showa -1 resolves to Taisho 13", 81 "taisho", 13); 82 83 const taisho15AfterStart = Temporal.ZonedDateTime.from({ era: "taisho", eraYear: 15, monthCode: "M12", day: 25, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 84 TemporalHelpers.assertPlainDateTime( 85 taisho15AfterStart.toPlainDateTime(), 86 1926, 12, "M12", 25, 12, 34, 0, 0, 0, 0, "Taisho 15 resolves to Showa 1 after era start date", 87 "showa", 1); 88 89 const taisho1BeforeStart = Temporal.ZonedDateTime.from({ era: "taisho", eraYear: 1, monthCode: "M07", day: 29, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 90 TemporalHelpers.assertPlainDateTime( 91 taisho1BeforeStart.toPlainDateTime(), 92 1912, 7, "M07", 29, 12, 34, 0, 0, 0, 0, "Taisho 1 resolves to Meiji 45 before era start date", 93 "meiji", 45); 94 95 const taisho0 = Temporal.ZonedDateTime.from({ era: "taisho", eraYear: 0, monthCode: "M07", day: 30, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 96 TemporalHelpers.assertPlainDateTime( 97 taisho0.toPlainDateTime(), 98 1911, 7, "M07", 30, 12, 34, 0, 0, 0, 0, "Taisho 0 resolves to Meiji 44", 99 "meiji", 44); 100 101 const taisho1n = Temporal.ZonedDateTime.from({ era: "taisho", eraYear: -1, monthCode: "M07", day: 30, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 102 TemporalHelpers.assertPlainDateTime( 103 taisho1n.toPlainDateTime(), 104 1910, 7, "M07", 30, 12, 34, 0, 0, 0, 0, "Taisho -1 resolves to Meiji 43", 105 "meiji", 43); 106 107 const meiji45AfterStart = Temporal.ZonedDateTime.from({ era: "meiji", eraYear: 45, monthCode: "M07", day: 30, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 108 TemporalHelpers.assertPlainDateTime( 109 meiji45AfterStart.toPlainDateTime(), 110 1912, 7, "M07", 30, 12, 34, 0, 0, 0, 0, "Meiji 45 resolves to Taisho 1 after era start date", 111 "taisho", 1); 112 113 const meiji1BeforeStart = Temporal.ZonedDateTime.from({ era: "meiji", eraYear: 1, monthCode: "M10", day: 22, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 114 TemporalHelpers.assertPlainDateTime( 115 meiji1BeforeStart.toPlainDateTime(), 116 1868, 10, "M10", 22, 12, 34, 0, 0, 0, 0, "Meiji 1 resolves to CE 1868 before era start date", 117 "ce", 1868); 118 119 const meiji0 = Temporal.ZonedDateTime.from({ era: "meiji", eraYear: 0, monthCode: "M10", day: 23, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 120 TemporalHelpers.assertPlainDateTime( 121 meiji0.toPlainDateTime(), 122 1867, 10, "M10", 23, 12, 34, 0, 0, 0, 0, "Meiji 0 resolves to CE 1867", 123 "ce", 1867); 124 125 const meiji1n = Temporal.ZonedDateTime.from({ era: "meiji", eraYear: -1, monthCode: "M10", day: 23, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 126 TemporalHelpers.assertPlainDateTime( 127 meiji1n.toPlainDateTime(), 128 1866, 10, "M10", 23, 12, 34, 0, 0, 0, 0, "Meiji -1 resolves to CE 1866", 129 "ce", 1866); 130 131 const ce1868AfterStart = Temporal.ZonedDateTime.from({ era: "ce", eraYear: 1868, monthCode: "M10", day: 23, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 132 TemporalHelpers.assertPlainDateTime( 133 ce1868AfterStart.toPlainDateTime(), 134 1868, 10, "M10", 23, 12, 34, 0, 0, 0, 0, "CE 1868 resolves to Meiji 1 after era start date", 135 "meiji", 1); 136 137 const ce0 = Temporal.ZonedDateTime.from({ era: "ce", eraYear: 0, monthCode: "M01", day: 1, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 138 TemporalHelpers.assertPlainDateTime( 139 ce0.toPlainDateTime(), 140 0, 1, "M01", 1, 12, 34, 0, 0, 0, 0, "CE 0 resolves to BCE 1", 141 "bce", 1); 142 143 const ce1n = Temporal.ZonedDateTime.from({ era: "ce", eraYear: -1, monthCode: "M01", day: 1, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 144 TemporalHelpers.assertPlainDateTime( 145 ce1n.toPlainDateTime(), 146 -1, 1, "M01", 1, 12, 34, 0, 0, 0, 0, "CE -1 resolves to BCE 2", 147 "bce", 2); 148 149 const bce0 = Temporal.ZonedDateTime.from({ era: "bce", eraYear: 0, monthCode: "M01", day: 1, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 150 TemporalHelpers.assertPlainDateTime( 151 bce0.toPlainDateTime(), 152 1, 1, "M01", 1, 12, 34, 0, 0, 0, 0, "BCE 0 resolves to CE 1", 153 "ce", 1); 154 155 const bce1n = Temporal.ZonedDateTime.from({ era: "bce", eraYear: -1, monthCode: "M01", day: 1, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 156 TemporalHelpers.assertPlainDateTime( 157 bce1n.toPlainDateTime(), 158 2, 1, "M01", 1, 12, 34, 0, 0, 0, 0, "BCE -1 resolves to CE 2", 159 "ce", 2); 160 161 // Years far after the end of an era 162 163 const heisei100 = Temporal.ZonedDateTime.from({ era: "heisei", eraYear: 100, monthCode: "M12", day: 31, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 164 TemporalHelpers.assertPlainDateTime( 165 heisei100.toPlainDateTime(), 166 2088, 12, "M12", 31, 12, 34, 0, 0, 0, 0, "Heisei 100 resolves to Reiwa 70", 167 "reiwa", 70); 168 169 const showa100 = Temporal.ZonedDateTime.from({ era: "showa", eraYear: 100, monthCode: "M12", day: 31, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 170 TemporalHelpers.assertPlainDateTime( 171 showa100.toPlainDateTime(), 172 2025, 12, "M12", 31, 12, 34, 0, 0, 0, 0, "Showa 100 resolves to Reiwa 7", 173 "reiwa", 7); 174 175 const taisho100 = Temporal.ZonedDateTime.from({ era: "taisho", eraYear: 100, monthCode: "M12", day: 31, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 176 TemporalHelpers.assertPlainDateTime( 177 taisho100.toPlainDateTime(), 178 2011, 12, "M12", 31, 12, 34, 0, 0, 0, 0, "Taisho 100 resolves to Heisei 23", 179 "heisei", 23); 180 181 const meiji100 = Temporal.ZonedDateTime.from({ era: "meiji", eraYear: 100, monthCode: "M12", day: 31, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 182 TemporalHelpers.assertPlainDateTime( 183 meiji100.toPlainDateTime(), 184 1967, 12, "M12", 31, 12, 34, 0, 0, 0, 0, "Meiji 100 resolves to Showa 42", 185 "showa", 42); 186 187 const ce2000 = Temporal.ZonedDateTime.from({ era: "ce", eraYear: 2000, monthCode: "M12", day: 31, hour: 12, minute: 34, timeZone: "UTC", calendar }, options); 188 TemporalHelpers.assertPlainDateTime( 189 ce2000.toPlainDateTime(), 190 2000, 12, "M12", 31, 12, 34, 0, 0, 0, 0, "CE 2000 resolves to Heisei 12", 191 "heisei", 12); 192 193 reportCompare(0, 0);