PHPで現在時刻を取得する方法を簡単に解説

PHPで現在時刻を取得する方法を簡単に解説

公開: 更新:
CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座


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やプログラミングに関するコラム


ITやプログラミングに関するニュース

ブログに戻る

コメントを残す

コメントは公開前に承認される必要があることにご注意ください。

CodeCampが提供するDX人材育成が可能なプログラミングやITが学べる公開講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプが提供する無料で学べるプログラミングスクール講座 - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア 配属3ヶ月で30%の生産性向上を実現するいよぎんコンピュータサービスの新人研修に迫る - IT・プログラミングを知って学べるコネクトメディア 金融業界の業務効率化を加速するニッセイアセットマネジメントの生成AI×GAS活用研修事例 - IT・プログラミングを知って学べるコネクトメディア 【製造業のDX人材育成事例】デジタル人材の即戦力化を実現する、日本ガイシ株式会社の異動者向オンボーディング研修 - ITやプログラミングを知って学べるコネクトメディア フューチャーアーキテクト株式会社が実現した新入社員向けIT研修プログラムでタスクフォース制度が主体的な学びと成長を生み出す - IT・プログラミングを知って学べるコネクトメディア コードキャンプDX人材育成研修 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【IT新入社員研修】オンラインとオフラインの最適バランスを実現したFutureOneの導入事例 - IT・プログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/【新入社員研修】柔軟なハイブリッド型Java研修で実現した新卒20名の成長と成果|サークレイス株式会社 - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/現場により近いところにデジタルを根付かせるDX基礎講座研修|株式会社ブリヂストン - ITやプログラミングを知って学べるコネクトメディア コードキャンプIT・プログラミング研修事例/業務の効率化・DX推進に向けたIT人材育成への第一歩|株式会社カナエ - ITやプログラミングを知って学べるコネクトメディア 企業・法人向けのIT・プログラミング研修 - ITやプログラミングを知って学べるコネクトメディア

新着記事

対象者別で探す

子供(小学生・中学生・高校生)向け
プログラミング教室検索する

子供(小学生・中学生・高校生)がロボットやプログラミング言語を学ぶことができるオフラインからオンラインスクールを検索、比較することが可能です。

子供(小学生・中学生・高校生)
プログラミング教室検索する

ITやプログラムなどの
最新情報を検索する

日々、新しいITやプログラミング言語の情報が流れていきますが、特定の情報を時系列でニュースやコラムを確認することができます。

ITやプログラムなどの
最新情報を検索する