P粉9680081752023-08-24 14:38:40
この記事の執筆時点では、DST (夏時間) 変換を正しく処理できるのは他の回答のうち 1 つだけです。カリフォルニアにあるシステムでの結果は次のとおりです:
リーリー#Math.round は正しい結果を返しますが、少し扱いにくいと思います。代わりに、DST の開始時または終了時の UTC オフセットの変更を明示的に考慮することで、正確な算術演算を使用できます。
リーリー
イラスト
JavaScript の日付計算は注意が必要です。たとえば、2013 年 3 月 10 日の午前 12:00 太平洋標準時 (UTC-08:00) は、2013 年 3 月 10 日午前 8:00 UTC、および 2013 年 3 月 11 日午前 12:00 太平洋夏時間 ( UTC-07 :00) は 2013 年 3 月 11 日 7:00 AM UTC として保存されます。この日、午前 0 時から午前 0 時までの現地時間は UTC よりわずか 23 時間進んでいます。
現地時間での 1 日の長さは 24 時間より前後する場合がありますが、UTC での 1 日は常に正確に 24 時間です。
上に示した daysBetween メソッドは、最初に treatAsUTC
を呼び出して両方の現地時間を UTC 午前 0 時に調整し、次に減算して除算することでこれを利用しています。
P粉1868974652023-08-24 12:44:32
これは、質問で提起された問題を解決するための概念実証としての datediff
の クイック アンド ダーティ 実装です。これは、2 つの日付を減算することでそれらの間の経過ミリ秒数を取得できるという事実に基づいており、これにより元の数値 (1970 年初頭からのミリ秒数) に強制されます。