JavaScript Date.now() 完全ガイド
JavaScriptのDate.now()とDateオブジェクトによるUnix timestamp操作の完全ガイド。生成、変換、フォーマット、よくある落とし穴を網羅。
Language
Date.now()
詳細な説明
JavaScriptのDate.now()は、Unix epochからのミリ秒数として現在時刻を返します。JavaScriptでtimestampを取得する最も直接的な方法であり、すべてのモダンブラウザとNode.jsで利用可能です。
timestampの取得:
// 現在のtimestamp(ミリ秒)
Date.now() // 1700000000000
// 現在のtimestamp(秒、Unix標準)
Math.floor(Date.now() / 1000) // 1700000000
// Dateオブジェクトから
new Date().getTime() // Date.now()と同じ
+new Date() // 型強制トリック、同じ結果
timestampからDateオブジェクトの作成:
// ミリ秒から
new Date(1700000000000) // 2023-11-14T22:13:20.000Z
// 秒から(1000を掛ける必要あり)
new Date(1700000000 * 1000) // 同じ結果
// 誤り:秒をそのまま渡す
new Date(1700000000) // 1970-01-20T16:13:20.000Z (!)
最後の例は、JavaScriptで最もよくあるtimestampバグです。Dateコンストラクタは常にミリ秒を期待します。秒ベースのtimestampを渡すと、1970年1月の日付が返されます。
フォーマット:
const d = new Date();
d.toISOString() // "2024-01-15T09:30:00.000Z"
d.toUTCString() // "Mon, 15 Jan 2024 09:30:00 GMT"
d.toLocaleDateString() // ロケール依存
パフォーマンス計測: コード実行時間の計測には、Date.now()ではなくperformance.now()を使用してください。サブミリ秒の精度を提供し、システムクロックの変更の影響を受けません。
タイムゾーンの罠: JavaScriptのDateオブジェクトは内部的に常にUTCです。getHours()やtoString()はランタイムのタイムゾーンに基づくローカル時刻を返しますが、getUTCHours()やtoISOString()はUTCを返します。Node.jsではTZ環境変数でタイムゾーンを制御できます。ブラウザでは、Intl.DateTimeFormatで明示的なtimeZoneオプションを使用しない限り、ユーザーのシステムタイムゾーンに依存します。
ユースケース
フロントエンドアプリケーションでは、Date.now()がJWTの有効期限チェック、ユーザー入力のデバウンス、timestampプレフィックス付きの一意なIDの生成に広く使われています。