タイムスタンプ変換ツール
Unixタイムスタンプを読みやすい日付に変換、またはその逆も可能。どちらを編集しても双方向がリアルタイムで同期します。
Unixタイムスタンプ
日付と時刻
Unixタイムスタンプとは?
1970年1月1日からの秒数(またはミリ秒数)。
Unixエポックは1970年1月1日UTC午前0時です。タイムスタンプはそれ以降経過した秒数(またはミリ秒数)にすぎず、そのためフォーマット済みの日付文字列とは異なり、単純な数値としてソートや比較ができます。
秒とミリ秒のタイムスタンプの違い
Unix、Linux、ほとんどのバックエンドAPIは秒を使用します。JavaScript自身のDate.now()やほとんどのフロントエンドコードはミリ秒を使用します。この2つを混同することは最もよくあるタイムスタンプのバグの一つで、「秒」の値を「ミリ秒」フィールドに貼り付けると1970年付近の日付になってしまいます。
仕組み
すべての処理はブラウザのDateオブジェクトを経由し、内部的には1つの数値のみを保持します。Unixエポック(1970年1月1日UTC午前0時)からのミリ秒数です。タイムスタンプを変換する際、秒を指定した場合はツールが1,000を掛けてDateを構築し、4つの形式で表示します。toLocaleString(ブラウザのIntlフォーマッターで、あなた自身のタイムゾーンと言語を使用)によるローカル時間、UTC、ISO 8601、そして現在との差を年・月・日・時間・分・秒に振り分けて計算する「3日後 / 2時間前」のような相対表示ラベルです。
逆方向では、日付ピッカーの値がローカル時間として解析され、秒とミリ秒の両方に再変換されます。datetime-localフィールドは、まずタイムゾーンのオフセット分だけタイムスタンプをずらしてから値が設定されます。この部分は、多くの変換ツールが微妙に間違えやすい箇所です。toISOString()は常にUTCで表現するため、このずらし処理がないと、ピッカーには期待する壁時計時間から数時間ずれた時刻が表示されてしまいます。
このツールが単位を明示することで防いでいる典型的なミスが、秒とミリ秒の混同です。現在のUnix時間は秒表記で10桁、ミリ秒表記で13桁です。ミリ秒の値を秒として解析すると、5万年以上先の未来に飛んでしまいます。逆の場合は1970年1月になります。変換結果がおかしいと感じたら、単位のドロップダウンを切り替えてみてください。ほとんどの場合、それが原因のすべてです。範囲外の値(JavaScriptの日付はエポックの前後それぞれ約1億日、おおよそ西暦275760年まで)は、意味不明な結果ではなく明確なエラーとして表示されます。
すべての解析と整形はローカルのブラウザAPIの処理です。変換中にDevToolsのNetworkタブを開いてみてください。リクエストは一切発生せず、ログのタイムスタンプがあなたのマシンから外に出ることはありません。