PHPで現在日時を取得するには、主に次の方法があります。
date()
DateTime
DateTimeImmutable
簡単に現在日時を表示したいだけなら date() で十分です。
ただし、実務で日時の加算・減算、タイムゾーン変換、DB保存、期限判定などを行う場合は、DateTimeImmutable を使う方法がおすすめです。
この記事では、PHPで現在日時を取得する基本的な方法から、日本時間で取得する方法、フォーマットの指定、Unixタイムスタンプ、ミリ秒・マイクロ秒の取得、データベース保存時の考え方まで詳しく解説します。
PHPで現在日時を取得する基本
もっとも簡単に現在日時を取得する方法は、date() 関数を使う方法です。
echo date('Y-m-d H:i:s');
出力例は次のようになります。
2026-05-05 14:30:45
date() は、指定したフォーマットに従って日付や時刻を文字列として出力する関数です。
ただし、date() の結果はPHPのデフォルトタイムゾーン設定に依存します。
サーバーの設定がUTCになっている場合、日本時間とは9時間ずれた日時が表示されることがあります。
そのため、日本時間で現在日時を取得したい場合は、タイムゾーンの設定もあわせて行う必要があります。
日本時間で現在日時を取得する方法
日本時間で現在日時を取得したい場合は、date_default_timezone_set() を使ってタイムゾーンを設定します。
date_default_timezone_set('Asia/Tokyo');
echo date('Y-m-d H:i:s');
このように書くことで、PHPの日付・時刻関数で使用されるデフォルトタイムゾーンを日本時間に設定できます。
Asia/Tokyo は、日本時間を表すタイムゾーンIDです。
小規模なPHPファイルであれば、ファイルの先頭付近に次のように書いておくとよいでしょう。
<?php
date_default_timezone_set('Asia/Tokyo');
echo date('Y-m-d H:i:s');
ただし、複数のPHPファイルで同じ設定を使う場合は、各ファイルに毎回書くよりも、共通の初期化ファイルにまとめておく方が管理しやすくなります。
また、サーバー設定を変更できる場合は、php.ini に次のように設定する方法もあります。
date.timezone = "Asia/Tokyo"
date() でよく使うフォーマット
date() では、フォーマット文字を指定して出力形式を変更できます。
date('Y-m-d H:i:s');
代表的なフォーマットは次の通りです。
| フォーマット | 意味 | 出力例 |
|---|---|---|
Y-m-d | 年月日 | 2026-05-05 |
Y/m/d | スラッシュ区切りの年月日 | 2026/05/05 |
H:i:s | 時分秒 | 14:30:45 |
Y-m-d H:i:s | 年月日と時分秒 | 2026-05-05 14:30:45 |
Y年m月d日 H時i分 | 日本語形式 | 2026年05月05日 14時30分 |
c | ISO 8601形式 | 2026-05-05T14:30:45+09:00 |
U | Unixタイムスタンプ | 現在時刻に応じた数値 |
例えば、日本語形式で現在日時を表示したい場合は、次のように書きます。
date_default_timezone_set('Asia/Tokyo');
echo date('Y年m月d日 H時i分');
出力例は次の通りです。
2026年05月05日 14時30分
DateTime で現在日時を取得する方法
現在日時をオブジェクトとして扱いたい場合は、DateTime クラスを使います。
$now = new DateTime();
echo $now->format('Y-m-d H:i:s');
タイムゾーンを明示する場合は、DateTimeZone を使います。
$now = new DateTime('now', new DateTimeZone('Asia/Tokyo'));
echo $now->format('Y-m-d H:i:s');
DateTime を使うと、現在日時を単なる文字列ではなく、日時オブジェクトとして扱えます。
そのため、次のような処理がしやすくなります。
- 日時を加算・減算する
- 日時を比較する
- タイムゾーンを変換する
- 指定日時との差分を求める
- フォーマットを変更して出力する
例えば、現在日時から1日後の日時を取得する場合は、次のように書けます。
$now = new DateTime('now', new DateTimeZone('Asia/Tokyo'));
$tomorrow = $now->modify('+1 day');
echo $tomorrow->format('Y-m-d H:i:s');
ただし、DateTime には注意点があります。
DateTime はミュータブル、つまり変更可能なオブジェクトです。
modify() などのメソッドを実行すると、元のオブジェクト自体が変更されます。
$now = new DateTime('now', new DateTimeZone('Asia/Tokyo'));
$tomorrow = $now->modify('+1 day');
echo $now->format('Y-m-d H:i:s') . PHP_EOL;
echo $tomorrow->format('Y-m-d H:i:s') . PHP_EOL;
この場合、$now も1日後の日時に変更されています。
意図せず元の日時が変わると、バグの原因になることがあります。
そのため、新規開発では次に紹介する DateTimeImmutable の使用がおすすめです。
おすすめは DateTimeImmutable を使う方法
実務で現在日時を扱う場合は、DateTimeImmutable を使う方法がおすすめです。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
echo $now->format('Y-m-d H:i:s');
DateTimeImmutable は、DateTime と同じように日時をオブジェクトとして扱えるクラスです。
大きな違いは、日時を変更するメソッドを実行しても、元のオブジェクトが変更されないことです。
例えば、現在日時と1日後の日時を扱う場合は、次のように書けます。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
$tomorrow = $now->modify('+1 day');
echo $now->format('Y-m-d H:i:s') . PHP_EOL;
echo $tomorrow->format('Y-m-d H:i:s') . PHP_EOL;
このコードでは、$now は現在日時のままです。
$tomorrow には、1日後の新しい日時オブジェクトが入ります。
このように、DateTimeImmutable は元の日時を保持したまま別の日時を作れるため、日時計算を安全に行いやすくなります。
DateTimeImmutable を使うメリット
DateTimeImmutable には、次のようなメリットがあります。
| メリット | 内容 |
|---|---|
| 元の日時が変わらない | modify() などを使っても元のオブジェクトは保持される |
| バグを防ぎやすい | 意図しない日時変更が起きにくい |
| 日時計算に向いている | 加算・減算・比較・変換がしやすい |
| タイムゾーンを明示しやすい | DateTimeZone と組み合わせて扱える |
| 実務コードで管理しやすい | 処理の流れが読みやすくなる |
特に、次のような処理では DateTimeImmutable が便利です。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
$nextWeek = $now->modify('+1 week');
$lastMonth = $now->modify('-1 month');
echo $now->format('Y-m-d H:i:s') . PHP_EOL;
echo $nextWeek->format('Y-m-d H:i:s') . PHP_EOL;
echo $lastMonth->format('Y-m-d H:i:s') . PHP_EOL;
$now を基準にして、1週間後や1か月前の日時を安全に作成できます。
Unixタイムスタンプを取得する方法
Unixタイムスタンプを取得したい場合は、time() を使います。
$timestamp = time();
echo $timestamp;
Unixタイムスタンプとは、1970年1月1日 00:00:00 UTCからの経過秒数を表す数値です。
ログ管理、期限判定、キャッシュ制御などで使われることがあります。
DateTimeImmutable からUnixタイムスタンプを取得することもできます。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
echo $now->getTimestamp();
なお、Unixタイムスタンプそのものはタイムゾーン情報を持ちません。タイムゾーンは、日時を文字列として表示するときに関係します。
ミリ秒・マイクロ秒つきで現在日時を取得する方法
秒より細かい単位まで取得したい場合は、DateTimeImmutable の format() を使います。
ミリ秒つきで取得する
ミリ秒を取得したい場合は、v を使います。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
echo $now->format('Y-m-d H:i:s.v');
出力例は次の通りです。
2026-05-05 14:30:45.123
マイクロ秒つきで取得する
マイクロ秒を取得したい場合は、u を使います。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
echo $now->format('Y-m-d H:i:s.u');
出力例は次の通りです。
2026-05-05 14:30:45.123456
注意点として、date() 関数で u を使っても、基本的には期待通りのマイクロ秒は取得できません。
echo date('Y-m-d H:i:s.u');
この場合、マイクロ秒部分が 000000 になることがあります。
マイクロ秒やミリ秒を扱いたい場合は、date() ではなく DateTimeImmutable を使うのが安全です。
ISO 8601形式で現在日時を取得する方法
API連携やログ出力では、タイムゾーン情報を含むISO 8601形式が便利です。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
echo $now->format('c');
出力例は次の通りです。
2026-05-05T14:30:45+09:00
この形式では、日時だけでなく +09:00 のようなタイムゾーン情報も含まれます。
そのため、単に次のように出力するよりも、
2026-05-05 14:30:45
次のように出力した方が、どのタイムゾーンの日時なのかが明確になります。
2026-05-05T14:30:45+09:00
APIで日時を扱う場合や、海外システムと連携する場合は、ISO 8601形式を検討するとよいでしょう。
UTCで現在日時を取得する方法
アプリケーションによっては、日本時間ではなくUTCで日時を扱う方が適している場合があります。
UTCで現在日時を取得するには、タイムゾーンに UTC を指定します。
$nowUtc = new DateTimeImmutable('now', new DateTimeZone('UTC'));
echo $nowUtc->format('Y-m-d H:i:s');
ISO 8601形式で出力する場合は、次のように書きます。
$nowUtc = new DateTimeImmutable('now', new DateTimeZone('UTC'));
echo $nowUtc->format('c');
出力例は次の通りです。
2026-05-05T05:30:45+00:00
UTCで保存し、表示時に日本時間へ変換する設計は、複数タイムゾーンに対応するシステムでよく使われます。
UTCから日本時間へ変換する方法
UTCの日時を日本時間に変換するには、setTimezone() を使います。
$utcDate = new DateTimeImmutable('2026-05-05 05:30:45', new DateTimeZone('UTC'));
$japanDate = $utcDate->setTimezone(new DateTimeZone('Asia/Tokyo'));
echo $japanDate->format('Y-m-d H:i:s');
出力結果は次のようになります。
2026-05-05 14:30:45
UTCと日本時間の差は通常9時間です。
そのため、UTCの 05:30:45 は、日本時間では 14:30:45 になります。
データベースに現在日時を保存する方法
MySQLなどのデータベースに現在日時を保存する場合は、Y-m-d H:i:s 形式がよく使われます。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
$createdAt = $now->format('Y-m-d H:i:s');
PDOで保存する例は次の通りです。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
$createdAt = $now->format('Y-m-d H:i:s');
$sql = 'INSERT INTO posts (title, created_at) VALUES (:title, :created_at)';
$stmt = $pdo->prepare($sql);
$stmt->execute([
':title' => 'サンプル記事',
':created_at' => $createdAt,
]);
日本国内向けの小規模なシステムであれば、日本時間のまま保存するケースもあります。
一方で、海外ユーザーがいるサービス、API連携が多いシステム、複数タイムゾーンを扱うシステムでは、UTCで保存し、表示時にユーザーのタイムゾーンへ変換する設計がよく使われます。
UTCで保存する場合は、次のようにします。
$nowUtc = new DateTimeImmutable('now', new DateTimeZone('UTC'));
$createdAt = $nowUtc->format('Y-m-d H:i:s');
表示時に日本時間へ変換する場合は、次のようにします。
$utcDate = new DateTimeImmutable($createdAt, new DateTimeZone('UTC'));
$japanDate = $utcDate->setTimezone(new DateTimeZone('Asia/Tokyo'));
echo $japanDate->format('Y-m-d H:i:s');
現在日時を使った実用例
ここからは、PHPで現在日時を扱う実用的なコード例を紹介します。
ログに現在日時を出力する
処理の実行時刻をログに残したい場合は、次のように書けます。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
error_log('実行日時: ' . $now->format('Y-m-d H:i:s'));
ログでは、後から確認しやすいように日時を含めておくと便利です。
ファイル名に現在日時を入れる
バックアップファイルやCSVファイルを作成する場合、ファイル名に現在日時を入れることがあります。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
$filename = 'backup_' . $now->format('Ymd_His') . '.zip';
echo $filename;
出力例は次の通りです。
backup_20260505_143045.zip
Ymd_His のように区切り文字を少なくすると、ファイル名として扱いやすい形式になります。
期限切れかどうかを判定する
現在日時と期限日時を比較することで、期限切れかどうかを判定できます。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
$deadline = new DateTimeImmutable('2026-05-10 23:59:59', new DateTimeZone('Asia/Tokyo'));
if ($now > $deadline) {
echo '期限切れです';
} else {
echo 'まだ期限内です';
}
キャンペーン期間、申込期限、公開期限などを判定する場合に使えます。
1週間後の日時を取得する
現在日時から1週間後を取得するには、modify('+1 week') を使います。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
$nextWeek = $now->modify('+1 week');
echo $nextWeek->format('Y-m-d H:i:s');
同じように、1日前、1か月後、30分後なども取得できます。
$yesterday = $now->modify('-1 day');
$nextMonth = $now->modify('+1 month');
$after30Minutes = $now->modify('+30 minutes');
月初と月末を取得する
現在月の月初・月末を取得したい場合は、次のように書けます。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
$firstDay = $now->modify('first day of this month')->setTime(0, 0, 0);
$lastDay = $now->modify('last day of this month')->setTime(23, 59, 59);
echo $firstDay->format('Y-m-d H:i:s') . PHP_EOL;
echo $lastDay->format('Y-m-d H:i:s') . PHP_EOL;
出力例は次の通りです。
2026-05-01 00:00:00
2026-05-31 23:59:59
月別集計や期間指定検索などでよく使います。
date() と DateTimeImmutable の使い分け
PHPで現在日時を取得する方法はいくつかありますが、用途によって使い分けるとよいでしょう。
| 方法 | 向いている用途 |
|---|---|
date() | 現在日時を手軽に文字列表示したい場合 |
time() | Unixタイムスタンプを取得したい場合 |
DateTime | 既存コードで使われている場合、または変更可能な日時オブジェクトが必要な場合 |
DateTimeImmutable | 新規開発、日時計算、タイムゾーン変換、DB保存、期限判定など |
シンプルに表示するだけなら、次のコードで十分です。
date_default_timezone_set('Asia/Tokyo');
echo date('Y-m-d H:i:s');
一方で、実務で日時を扱うなら、次のように DateTimeImmutable を使う方が安全です。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
echo $now->format('Y-m-d H:i:s');
WordPressで現在日時を扱う場合の注意点
WordPressで現在日時を扱う場合は、PHP標準の date() だけでなく、WordPressのタイムゾーン設定も意識する必要があります。
WordPressでは、管理画面の「設定」→「一般」→「タイムゾーン」でサイトのタイムゾーンを設定できます。
テーマやプラグインの開発では、単純に次のように書くと、サーバーのタイムゾーン設定に依存してしまう場合があります。
echo date('Y-m-d H:i:s');
WordPressサイトの設定に合わせて日時を扱いたい場合は、WordPressが用意している日時関連の関数を使う方が適しているケースがあります。
例えば、現在日時をWordPressのタイムゾーン設定に合わせて取得したい場合は、current_time() などを検討します。
echo current_time('Y-m-d H:i:s');
WordPressの記事公開日時、更新日時、予約投稿、ログ出力などでは、PHP側のタイムゾーンとWordPress側のタイムゾーン設定が混ざらないように注意しましょう。
まとめ
PHPで現在日時を取得するだけなら、date() を使うのが簡単です。
date_default_timezone_set('Asia/Tokyo');
echo date('Y-m-d H:i:s');
ただし、実務ではタイムゾーンや日時計算を扱う場面が多いため、DateTimeImmutable を使う方法がおすすめです。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
echo $now->format('Y-m-d H:i:s');
ミリ秒まで取得したい場合は、次のように書きます。
echo $now->format('Y-m-d H:i:s.v');
マイクロ秒まで取得したい場合は、次のように書きます。
echo $now->format('Y-m-d H:i:s.u');
API連携やログ出力では、タイムゾーン情報を含むISO 8601形式も便利です。
echo $now->format('c');
PHPで日時を扱う際は、単に「現在日時を取得する」だけでなく、どのタイムゾーンの日時なのか、文字列として表示したいのか、DBに保存したいのか、日時計算を行いたいのかを意識することが大切です。
新しくコードを書く場合は、まず次の形を基本として覚えておくとよいでしょう。
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
echo $now->format('Y-m-d H:i:s');
以上、PHPで現在日時を取得する方法についてでした。
最後までお読みいただき、ありがとうございました。









