ログに並ぶ 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() |
| PHP | 秒 | time() |
| Python | 秒(小数) | time.time() |
| MySQL | 秒 | UNIX_TIMESTAMP() |
| Java | ミリ秒 | System.currentTimeMillis() |
| Go | 秒 / ナノ秒 | time.Now().Unix() / UnixNano() |
JavaScriptとPHPの間でデータをやり取りするときに、1000倍の食い違いが起きるのはこのためです。境界をまたぐ場所では、単位を明示的に変換してください。
日本時間とUTCは、9時間ずれている
| UTC | 日本時間 (JST) | |
|---|---|---|
| 時差 | 基準 | +9時間 |
| 夏時間 | なし | なし |
| ISO 8601表記 | 2026-08-23T03:00:00Z | 2026-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 / iat | 秒 | Base64を解いた中に入っている。Base64ツールで中身を確認できる |
| データベースの日時列 | 秒 or ミリ秒 or 日時型 | 列の型定義を確認する |
| APIのレスポンス | まちまち | 仕様書に単位の記載がなければ、桁数で判断する |
| ファイルの更新日時 | 秒(環境による) | — |
| Cookieの有効期限 | 日時文字列(GMT) | — |
とくにJWTの exp(有効期限)は、「トークンが切れているのか、それとも別の原因なのか」を判断するときに必ず見る値です。桁数は10桁(秒)で、現在時刻より小さければ期限切れです。
「1970年1月1日」が表示されたときの意味
画面やログに1970年1月1日が出るのは、ほぼ次のどれかです。バグの手がかりになります。
| 原因 | 詳しく |
|---|---|
| 値が 0 になっている | 変数が初期化されたまま。日時が設定されていない |
| null や空文字を変換した | 多くの言語で0として扱われる |
| ミリ秒を秒として扱った | 13桁を秒と誤解すると遠い未来に、逆に秒をミリ秒とすると1970年付近になる |
| 文字列の変換に失敗した | 書式が合わず、0が返っている |
いずれも「日時が入っていない」ことのサインです。1970年は日付の異常値だと覚えておくと、原因の切り分けが早くなります。
あわせて使える無料ツール
- タイムゾーン変換ツール — 日本時間と世界の都市の時差
- 日付・日数計算ツール — 2つの日付の間の日数とN日後の日付
- 和暦・西暦変換ツール — 和暦と西暦の相互変換