PHPで現在日時を取得する方法について

採用はこちら

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分
cISO 8601形式2026-05-05T14:30:45+09:00
UUnixタイムスタンプ現在時刻に応じた数値

例えば、日本語形式で現在日時を表示したい場合は、次のように書きます。

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タイムスタンプそのものはタイムゾーン情報を持ちません。タイムゾーンは、日時を文字列として表示するときに関係します。

ミリ秒・マイクロ秒つきで現在日時を取得する方法

秒より細かい単位まで取得したい場合は、DateTimeImmutableformat() を使います。

ミリ秒つきで取得する

ミリ秒を取得したい場合は、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で現在日時を取得する方法についてでした。

最後までお読みいただき、ありがとうございました。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!
目次