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の生成に広く使われています。

Try It — Timestamp Converter

フルツールを開く