PHPで現在時刻を取得する基本的な方法
PHPで現在の時刻を取得したい場合、主に2つの方法があります。
- date関数で取得する
- DateTimeクラスで取得する
それぞれの方法には特徴があり、用途に応じて使い分けることで効率的に時刻を取得できます。以下では各取得方法について詳しく解説していきます。
date関数で取得する
date関数は、フォーマットを指定することによって現在時刻を文字列として取得できます。第1引数にフォーマット文字列を指定すると、指定した形式で現在時刻が返されます。
<?php
echo date("Y-m-d H:i:s");
// 出力例: 2025-10-23 14:30:45
?>
上記のコードを実行すると、現在の年月日と時分秒が「2025-10-23 14:30:45」のような形式で出力されます。フォーマット文字列内の「Y」は4桁の年、「m」は2桁の月、「d」は2桁の日、「H」は24時間形式の時、「i」は分、「s」は秒を表します。
<?php
echo date("Y年m月d日 H時i分s秒");
// 出力例: 2025年10月23日 14時30分45秒
?>
フォーマット文字列は自由に組み合わせることができるため、任意の形式で日時を表示できます。日本語を混ぜて「2025年10月23日」のような表示も可能です。
DateTimeクラスで取得する
DateTimeクラスは、オブジェクト指向的に日時を扱うことができるクラスです。新しいDateTimeオブジェクトを作成し、formatメソッドで任意の形式に変換して出力します。
<?php
$now = new DateTime();
echo $now->format('Y-m-d H:i:s');
// 出力例: 2025-10-23 14:30:45
?>
DateTimeクラスのコンストラクタに引数を渡さない場合、現在時刻を表すオブジェクトが生成されます。formatメソッドの引数には、date関数と同じフォーマット文字列を使用できます。
<?php
$now = new DateTime('now');
echo $now->format('Y年m月d日 H時i分s秒');
// 出力例: 2025年10月23日 14時30分45秒
?>
コンストラクタに'now'を渡すことで、明示的に現在時刻を指定することもできます。DateTimeクラスはdate関数よりも柔軟な日時操作が可能であり、日時の計算や比較などの処理を行う場合に便利です。
【PR】プログラミングや生成AIを無料で学べる「コードキャンプフリー」
タイムゾーンを設定して正確な時刻を取得する方法
PHPで現在時刻を取得する際、サーバーのタイムゾーン設定によっては日本時間とは異なる時刻が表示されることがあります。正確な日本時間を取得するためには、以下の2つの方法でタイムゾーンを設定します。
- date_default_timezone_set関数で設定する
- DateTimeZoneクラスで設定する
それぞれの方法には適用範囲や使用場面に違いがあり、状況に応じて使い分けることで適切なタイムゾーン設定ができます。以下では各設定方法について詳しく解説していきます。
date_default_timezone_set関数で設定する
date_default_timezone_set関数は、PHPスクリプト全体のデフォルトタイムゾーンを設定する関数です。この関数を実行することによって、以降のdate関数やDateTimeクラスで使用されるタイムゾーンが変更されます。
<?php
date_default_timezone_set('Asia/Tokyo');
echo date("Y-m-d H:i:s");
// 出力例: 2025-10-23 14:30:45(日本時間)
?>
引数に'Asia/Tokyo'を指定することによって、日本標準時に設定できます。この設定はスクリプトの実行中は維持されますが、別のページに遷移すると設定はリセットされます。
<?php
// タイムゾーン設定前
echo date("Y-m-d H:i:s");
// 出力例: 2025-10-23 05:30:45(UTC)
date_default_timezone_set('Asia/Tokyo');
// タイムゾーン設定後
echo date("Y-m-d H:i:s");
// 出力例: 2025-10-23 14:30:45(日本時間)
?>
設定前と設定後で出力される時刻を比較すると、9時間の時差が反映されていることが確認できます。サーバーのデフォルト設定がUTCの場合、日本時間はUTC+9時間となります。
DateTimeZoneクラスで設定する
DateTimeZoneクラスは、DateTimeオブジェクトに対して個別にタイムゾーンを設定できるクラスです。複数のタイムゾーンを扱う必要がある場合に有効です。
<?php
$timezone = new DateTimeZone('Asia/Tokyo');
$now = new DateTime('now', $timezone);
echo $now->format('Y-m-d H:i:s');
// 出力例: 2025-10-23 14:30:45(日本時間)
?>
DateTimeクラスのコンストラクタの第2引数にDateTimeZoneオブジェクトを渡すことによって、特定のタイムゾーンで日時を生成できます。この方法では、スクリプト全体のデフォルト設定を変更せず、個別のオブジェクトに対してタイムゾーンを指定できます。
<?php
$tokyo = new DateTime('now', new DateTimeZone('Asia/Tokyo'));
$newyork = new DateTime('now', new DateTimeZone('America/New_York'));
echo "東京: " . $tokyo->format('Y-m-d H:i:s');
// 出力例: 東京: 2025-10-23 14:30:45
echo "ニューヨーク: " . $newyork->format('Y-m-d H:i:s');
// 出力例: ニューヨーク: 2025-10-23 01:30:45
?>
複数のDateTimeオブジェクトに異なるタイムゾーンを設定することによって、同時刻における世界各地の時刻を表示できます。国際的なサービスを開発する場合に便利な方法です。
フォーマット文字列を使って表示形式を変更する方法
PHPで現在時刻を取得する際、フォーマット文字列を使用することによって表示形式を自由にカスタマイズできます。年月日や時分秒、曜日などを組み合わせて、用途に応じた形式で時刻を表示します。
- 年月日のフォーマット
- 時分秒のフォーマット
- 曜日のフォーマット
それぞれのフォーマット文字には大文字と小文字の区別があり、組み合わせることによって様々な表示形式を実現できます。以下では各フォーマットについて詳しく解説していきます。
【PR】『Python』を学べる企業・個人向けのプログラミングコース
年月日のフォーマット
年月日を表示する際には、「Y」「m」「d」などのフォーマット文字を使用します。大文字と小文字で出力形式が異なるため、目的に応じて使い分けます。
<?php
$now = new DateTime();
// 4桁の年
echo $now->format('Y');
// 出力例: 2025
// 2桁の年
echo $now->format('y');
// 出力例: 25
// ゼロ埋めありの月
echo $now->format('m');
// 出力例: 10
// ゼロ埋めなしの月
echo $now->format('n');
// 出力例: 10
// ゼロ埋めありの日
echo $now->format('d');
// 出力例: 23
// ゼロ埋めなしの日
echo $now->format('j');
// 出力例: 23
?>
年は「Y」で4桁、「y」で2桁での表示が可能です。月と日については、「m」「d」はゼロ埋めあり、「n」「j」はゼロ埋めなしで出力されます。
<?php
$now = new DateTime();
// スラッシュ区切り
echo $now->format('Y/m/d');
// 出力例: 2025/10/23
// ハイフン区切り
echo $now->format('Y-m-d');
// 出力例: 2025-10-23
// 日本語形式
echo $now->format('Y年n月j日');
// 出力例: 2025年10月23日
?>
フォーマット文字の間に任意の文字列を挟むことによって、スラッシュやハイフン、日本語などで区切った表示が可能です。用途に応じて読みやすい形式を選択できます。
時分秒のフォーマット
時分秒を表示する際には、「H」「i」「s」などのフォーマット文字を使用します。24時間形式と12時間形式を選択できます。
<?php
$now = new DateTime();
// 24時間形式(ゼロ埋めあり)
echo $now->format('H');
// 出力例: 14
// 24時間形式(ゼロ埋めなし)
echo $now->format('G');
// 出力例: 14
// 12時間形式(ゼロ埋めあり)
echo $now->format('h');
// 出力例: 02
// 12時間形式(ゼロ埋めなし)
echo $now->format('g');
// 出力例: 2
// 分
echo $now->format('i');
// 出力例: 30
// 秒
echo $now->format('s');
// 出力例: 45
?>
時刻の表示には「H」と「G」が24時間形式、「h」と「g」が12時間形式に対応しています。分は「i」、秒は「s」で表示され、これらは常に2桁のゼロ埋めで出力されます。
<?php
$now = new DateTime();
// 標準的な時分秒表示
echo $now->format('H:i:s');
// 出力例: 14:30:45
// 12時間形式+午前午後
echo $now->format('g:i:s A');
// 出力例: 2:30:45 PM
// 日本語形式
echo $now->format('H時i分s秒');
// 出力例: 14時30分45秒
?>
「A」を使用することによって、午前午後を「AM」「PM」で表示できます。時分秒を組み合わせることで、様々な時刻表示形式を実現できます。
曜日のフォーマット
曜日を表示する際には、「w」「D」「l」などのフォーマット文字を使用します。数値形式と英語表記の両方に対応しています。
<?php
$now = new DateTime();
// 曜日番号(0:日曜〜6:土曜)
echo $now->format('w');
// 出力例: 4(木曜日の場合)
// 英語3文字表記
echo $now->format('D');
// 出力例: Thu
// 英語完全表記
echo $now->format('l');
// 出力例: Thursday
?>
「w」は0から6の数値で曜日を表し、0が日曜日、6が土曜日となります。「D」は3文字の略称、「l」は完全な曜日名を英語で出力します。
<?php
$now = new DateTime();
// 曜日を日本語で表示する場合
$week = ['日', '月', '火', '水', '木', '金', '土'];
$weekday = $week[$now->format('w')];
echo $now->format('Y年m月d日') . '(' . $weekday . ')';
// 出力例: 2025年10月23日(木)
?>
日本語で曜日を表示する場合は、「w」で取得した数値を配列のインデックスとして使用することによって実現できます。このように、フォーマット文字と配列を組み合わせることで柔軟な表示が可能です。
DateTimeImmutableクラスで安全に時刻を扱う方法
DateTimeImmutableクラスは、DateTimeクラスと同様に現在時刻を取得できるクラスですが、一度作成したオブジェクトを変更できないという特徴があります。不変オブジェクトとして扱うことによって、意図しない変更を防ぐことができます。
<?php
$now = new DateTimeImmutable();
echo $now->format('Y-m-d H:i:s');
// 出力例: 2025-10-23 14:30:45
?>
DateTimeImmutableオブジェクトを作成し、formatメソッドで任意の形式に変換して出力します。基本的な使い方はDateTimeクラスと変わりません。
<?php
$now = new DateTimeImmutable('now', new DateTimeZone('Asia/Tokyo'));
echo $now->format('Y年m月d日 H時i分s秒');
// 出力例: 2025年10月23日 14時30分45秒
?>
タイムゾーンの指定もDateTimeクラスと同様に、コンストラクタの第2引数にDateTimeZoneオブジェクトを渡すことによって設定できます。
DateTimeとDateTimeImmutableの違い
DateTimeとDateTimeImmutableの最も大きな違いは、オブジェクトの変更可否です。DateTimeは変更可能ですが、DateTimeImmutableは変更不可能です。
<?php
// DateTimeクラスの場合
$date1 = new DateTime('2025-10-23');
$date1->modify('+1 day');
echo $date1->format('Y-m-d');
// 出力例: 2025-10-24(元のオブジェクトが変更される)
// DateTimeImmutableクラスの場合
$date2 = new DateTimeImmutable('2025-10-23');
$date3 = $date2->modify('+1 day');
echo $date2->format('Y-m-d');
// 出力例: 2025-10-23(元のオブジェクトは変更されない)
echo $date3->format('Y-m-d');
// 出力例: 2025-10-24(新しいオブジェクトが返される)
?>
DateTimeクラスでmodifyメソッドを呼び出すと、元のオブジェクト自体が変更されます。一方、DateTimeImmutableクラスでは元のオブジェクトは変更されず、変更後の値を持つ新しいオブジェクトが返されます。
<?php
function processDate(DateTime $date) {
$date->modify('+1 day');
return $date->format('Y-m-d');
}
$myDate = new DateTime('2025-10-23');
echo processDate($myDate);
// 出力例: 2025-10-24
echo $myDate->format('Y-m-d');
// 出力例: 2025-10-24(関数内で元のオブジェクトが変更されている)
function processDateImmutable(DateTimeImmutable $date) {
$newDate = $date->modify('+1 day');
return $newDate->format('Y-m-d');
}
$myDate2 = new DateTimeImmutable('2025-10-23');
echo processDateImmutable($myDate2);
// 出力例: 2025-10-24
echo $myDate2->format('Y-m-d');
// 出力例: 2025-10-23(元のオブジェクトは変更されていない)
?>
関数に日付オブジェクトを渡す場合、DateTimeクラスでは関数内での変更が元のオブジェクトに影響を与えますが、DateTimeImmutableクラスでは影響を与えません。意図しない変更を防ぐため、DateTimeImmutableクラスの使用が推奨されます。
※上記コンテンツの内容やソースコードはAIで確認・デバッグしておりますが、間違いやエラー、脆弱性などがある場合は、コメントよりご報告いただけますと幸いです。
ITやプログラミングに関するコラム
【AWS】認定資格12種類の一覧や難易度、費用などを解説
Canvaとは?使い方やアカウント登録などを初心者向けに解説
git configで設定情報を確認・表示する方法
「Pythonはやめとけ」と言われる理由と学習するメリット
Ubuntuのversionを確認する方法









