Date / Time
Date: 夏時間の切替をまたぐ日付境界は 24 時間ではない
America/Los_Angeles の夏時間開始日における二つの現地深夜は、23 時間しか離れていません。
SourcedaylightSavingInstants.ts
Node.js 22
export function elapsedHours(start: Date, end: Date): number {
return (end.getTime() - start.getTime()) / 3_600_000;
}TestdaylightSavingInstants.test.ts
Node.js 22
import assert from "node:assert/strict";
import test from "node:test";
import { elapsedHours } from "../../src/datetime/daylightSavingInstants.js";
test("夏時間開始日の二つの現地深夜は23時間離れている", () => {
const losAngelesMidnightBefore = new Date("2026-03-08T08:00:00.000Z");
const losAngelesMidnightAfter = new Date("2026-03-09T07:00:00.000Z");
assert.equal(elapsedHours(losAngelesMidnightBefore, losAngelesMidnightAfter), 23);
});01Assertion
このテストで確認できること
- 切替前後の UTC instant の差分を計算できる
- 現地日付の翌日と 24 時間後を混同しない
Date は instant を表します。「翌日」のような暦の操作には、タイムゾーンとカレンダーを扱える API を選ぶ必要があります。
OBSERVED RESULT
expected: 2026-03-08 midnight → 2026-03-09 midnight = 23 hours
actual: 23