UNIXタイム変換|秒・ミリ秒の自動判別と日本時間の同時表示(無料)

ログに並ぶ 1787500800 という数字。データベースに入っている 1787500800000どちらもUNIXタイムですが、片方は秒、もう片方はミリ秒です。ここを取り違えると、1970年や5万年後の日付が出てきます。

このツールは、桁数から秒・ミリ秒・マイクロ秒を自動で判別し、日本時間とUTCを同時に表示します。逆方向(日時からUNIXタイム)にも対応し、曜日と「今から何日前か」も出します。現在のUNIXタイムは1秒ごとに更新されます。

処理はすべてブラウザ内で完結し、入力した値は送信されません。

UNIXタイム変換

秒・ミリ秒を自動判別。日本時間とUTCを同時に表示します。

日本時間 (JST)
協定世界時 (UTC)
ISO 8601
UNIX(秒)
UNIX(ミリ秒)
曜日
現在との差

NOW / 現在のUNIXタイム

ミリ秒
日本時間

UNIXタイムとは、1970年からの秒数

UNIXタイム(エポック秒)は、1970年1月1日 0時0分0秒(UTC)から数えた経過秒数です。タイムゾーンも夏時間も含まない、ただの数値です。

この単純さが利点になります。

利点内容
タイムゾーンに依存しない世界のどこで記録しても同じ値。表示するときだけ現地時間に直す
比較・計算が簡単引き算するだけで経過時間が出る
並べ替えが確実数値の大小がそのまま時系列になる
保存領域が小さい文字列の日時より短い

だからこそ、ログ、データベース、APIの内部では日時をUNIXタイムで持ち、人に見せるときだけ変換するという設計が一般的です。「保存は数値、表示はローカル時間」と覚えておくと、時差にまつわる不具合の大半を避けられます。

桁数で、単位を見分ける

単位の取り違えは、実務で最も多いミスです。桁数を見れば判別できます。

桁数単位間違えて解釈すると
10桁1787500800ミリ秒として読むと1970年になる
13桁ミリ秒1787500800000秒として読むと約5万年後になる
16桁マイクロ秒1787500800000000
19桁ナノ秒一部のログ基盤で使われる

覚え方。いま(2020年代)の秒は10桁、ミリ秒は13桁です。「10桁なら秒、13桁ならミリ秒」とだけ覚えておけば、実務の9割は判別できます。1970年や遠い未来の日付が出たときは、この単位を疑ってください。当ツールは桁数から自動判別し、どう解釈したかを画面に表示します。

言語によって既定の単位が違うのも、混乱の原因です。

環境既定の単位取得方法
JavaScriptミリ秒Date.now()
PHPtime()
Python秒(小数)time.time()
MySQLUNIX_TIMESTAMP()
Javaミリ秒System.currentTimeMillis()
Go秒 / ナノ秒time.Now().Unix() / UnixNano()

JavaScriptとPHPの間でデータをやり取りするときに、1000倍の食い違いが起きるのはこのためです。境界をまたぐ場所では、単位を明示的に変換してください。

日本時間とUTCは、9時間ずれている

UTC日本時間 (JST)
時差基準+9時間
夏時間なしなし
ISO 8601表記2026-08-23T03:00:00Z2026-08-23T12:00:00+09:00

日本には夏時間がないため、年間を通じて常に+9時間です。この点は、夏時間のある国を相手にするシステムより単純です。

ただし注意点があります。日付が変わる境界です。日本時間の8月23日 午前8時は、UTCでは8月22日 23時です。「日付ごとの集計」をUTC基準で行うと、日本の感覚とは1日ずれた区切りになります。アクセス解析やレポートの数字が合わない原因が、ここにあることは少なくありません。

2038年問題は、まだ終わっていない

UNIXタイムを32ビットの符号付き整数で保持しているシステムは、2038年1月19日3時14分7秒(UTC)を超えると値があふれ、1901年に戻ります。

保持形式上限状況
32ビット符号付き(秒)2038年1月19日要対応
64ビット符号付き(秒)約3000億年後実質問題なし
64ビット(ミリ秒)約2.9億年後実質問題なし

現在の主要なOSや言語は64ビットに移行済みですが、古い組み込み機器、レガシーなデータベースの列定義、独自形式のバイナリファイルには残っています。手元のシステムで確認したい場合は、2038年1月20日の日時を入れてみて、正しく扱えるかを試すのが手早い方法です。サポート期限の考え方はサポート期限(EOL)とはにまとめています。

実務でUNIXタイムを扱うときの原則

原則理由
保存はUTC、表示はローカル保存時にタイムゾーンを混ぜると、後から復元できなくなる
単位を列名や変数名に書くcreated_at_ms のようにすれば、取り違えが起きない
ISO 8601で受け渡すAPIの境界では、人が読めて誤解のない形式を使う
「日付」と「日時」を区別する誕生日のような日付にタイムゾーンは不要。UNIXタイムで持つとずれる
閏秒は気にしないUNIXタイムの定義上、閏秒は無視される

4番目は見落とされがちです。誕生日や締切日のような「日付そのもの」を、UNIXタイムとして0時0分で保存すると、タイムゾーンの違う環境で前日になります。日付は文字列(2026-08-23)として持つのが安全です。

よく使う期間を、秒数で覚えておく

UNIXタイムは秒数なので、期間の計算は足し算と引き算だけで済みます。よく使う値を控えておくと、電卓を叩かずに判断できます。

期間秒数使いどころ
1分60
1時間3,600キャッシュのTTL、セッションの有効期限
1日86,400日次バッチの区切り、Cookieの有効期間
1週間604,800週次の集計期間
30日2,592,000月次とみなす近似。実際の月とはずれる
1年(365日)31,536,000年次の近似。うるう年は+86,400

「1か月後」を秒数で計算してはいけません。30日を足すと、月によって日付がずれます。1月31日に30日を足すと3月2日(うるう年なら3月1日)になり、「翌月の同じ日」にはなりません。月単位・年単位の計算は、秒数ではなく日付として扱う関数を使ってください。秒数の足し算が正しく使えるのは、日単位までです。

日時の処理で踏みやすい落とし穴

落とし穴何が起きるか対処
サーバーのタイムゾーンがUTC日本時間の朝8時が、前日として集計される集計の区切りを明示的に日本時間で指定する
文字列からの変換で書式が違う「2026/08/23」が環境によって解釈されない、または月日が入れ替わるISO 8601(2026-08-23T12:00:00+09:00)で受け渡す
「日付」にタイムゾーンを付ける誕生日や締切日が、環境によって前日になる日付は文字列のまま持つ
ミリ秒と秒の混在1970年、または遠い未来の日付が出る列名・変数名に単位を書く(created_at_ms など)
夏時間のある地域を扱う1年に2回、存在しない時刻と重複する時刻が発生するUTCで保存し、表示時のみ変換する
閏秒UNIXタイムの定義上、無視される。通常は気にしなくてよい

UNIXタイムに出会う場所

場所形式確認のしかた
サーバーのアクセスログ秒、または日時文字列10桁の数字が並んでいたら秒
JWT(認証トークン)の exp / iatBase64を解いた中に入っている。Base64ツールで中身を確認できる
データベースの日時列秒 or ミリ秒 or 日時型列の型定義を確認する
APIのレスポンスまちまち仕様書に単位の記載がなければ、桁数で判断する
ファイルの更新日時秒(環境による)
Cookieの有効期限日時文字列(GMT)

とくにJWTの exp(有効期限)は、「トークンが切れているのか、それとも別の原因なのか」を判断するときに必ず見る値です。桁数は10桁(秒)で、現在時刻より小さければ期限切れです。

「1970年1月1日」が表示されたときの意味

画面やログに1970年1月1日が出るのは、ほぼ次のどれかです。バグの手がかりになります。

原因詳しく
値が 0 になっている変数が初期化されたまま。日時が設定されていない
null や空文字を変換した多くの言語で0として扱われる
ミリ秒を秒として扱った13桁を秒と誤解すると遠い未来に、逆に秒をミリ秒とすると1970年付近になる
文字列の変換に失敗した書式が合わず、0が返っている

いずれも「日時が入っていない」ことのサインです。1970年は日付の異常値だと覚えておくと、原因の切り分けが早くなります。

あわせて使える無料ツール