開発者 🔒 ブラウザ内で動作 — データは送信されません

ミリ秒を日付に変換

ミリ秒単位のUNIXタイムスタンプを日付として読み、1秒未満の値はISO 8601の行に残します。

現在のUNIXタイムスタンプ:
タイムスタンプ → 日付
日付 → タイムスタンプ

1行に1つのタイムスタンプまたは日付を、最大500行まで入力できます。

エポックのミリ秒を日付に変換する

フロントエンド開発者が出会う時刻の値は、多くがミリ秒です。言語がそう渡してくるからで、Date.now()が数えるのは秒ではなくミリ秒です。その先にあるログ基盤からデータベースの列までが、単位について足並みをそろえる必要に迫られます。このページは単位メニューをミリ秒にした状態でタイムスタンプ変換ツールを開くので、13桁の数値を貼り付けた瞬間から正しく読まれます。

答えは4行同時に表示されます。上部で選択中のタイムゾーンでの瞬間、同じ瞬間の<abbr title="Coordinated Universal Time">UTC、多くのAPIが求めるISO 8601形式、そして現在からの隔たりを平易な言葉で示したものです。すべてページ内で計算されるので、本番ログから取った値も自分のマシンに留まります。

13桁、そして数えるだけでは足りないとき

自動判定は桁数から働き、今世紀の日付なら正しく当たります。ただし単位は、その数値を生んだシステムの性質であって、数値自体の性質ではありません。単位メニューを固定すれば推測はなくなります。間違えた代償は目立たないものではありません。単位が1段変わるごとに、日付は3桁分ずれるからです。

1735689600000に選んだ単位生成される日付判定
秒56971年10月25日1000倍だけ逆方向にずれている
ミリ秒2025年1月1日 00:00:00 UTCこの数値が意味するもの
マイクロ秒1970年1月21日 02:08:09 UTC1970年近くの日付が典型的な症状
ナノ秒1970年1月1日 00:28:55 UTCほぼエポックそのもの

つまり1970年のはじめ数日の日付や、数万年先の日付は、壊れたデータであることはほとんどありません。同じ整数を誤った単位で読んだ結果であり、直すのは数値ではなくメニューです。

ミリ秒のタイムスタンプが生まれる場所

  • JavaScript:Date.now()とnew Date().getTime()はどちらもミリ秒を返し、new Date(n)もミリ秒を求めます。だから10桁の値は先に1000を掛ける必要があります。
  • Java:System.currentTimeMillis()とInstant.toEpochMilli()。
  • MongoDB:BSONの日付型は、エポックからのミリ秒を符号付き64ビットで数えた値です。
  • Kafka、Elasticsearch、そして多くのJSONログ形式。書き込む側の言語から単位を受け継いでいます。

データベースやUNIX系のツールは反対に秒で数えるため、JavaScriptのサービスとSQLの列の境目こそ、1000という係数が失われる場所です。疑わしい値をここで変換して日付を読むのが、どちら側が落としたのかを知る一番早い方法です。

丸めと、複数の値の変換

ミリ秒から秒への変換は切り捨てなので、1か所で、1つの向きに行ってください。あるサービスでは切り捨て、別のサービスでは四捨五入と混ざると、2つのイベントが同じ秒に入ったときにだけ現れる1秒差が生まれます。変換ツールの下の一括タブも同じ規則に従います。最大500行を貼り付けると、各行に端数を落とした秒の列と、端数を保ったISO 8601の列が並び、CSVでコピーできる状態になります。

関連する変換

10桁の値にはタイムスタンプを日付に変換があり、逆方向には、選んだ日付について秒とミリ秒の両方を返す日付をタイムスタンプに変換があります。現在のUNIXタイムスタンプはツールバーで動いているカウンターで、Discordのタイムスタンプは秒の形を必要とするため、下の単位へ変換したくなる代表的な理由になります。

関連ガイド