IT・WEB・ゲーム業界の転職に強いR-Stone

転職コラム

PHPのDatetimeをマスターしよう!使い方や基本的なメソッドをご紹介

DateTimeは予約システムやログ管理など、PHPアプリケーションで日時を扱うさまざまな場面で、頼りになるクラスです。

オブジェクト指向的アプローチを採用したDateTimeクラスは、従来のdate関数よりも拡張性が高く、複雑な日時操作を直感的におこなえます。

本記事では、DateTimeクラスの基本から応用まで、実践的な使い方を紹介します。これを機に、PHPの日時処理スキルをレベルアップさせましょう。

PHPのDateTimeクラスとは?

PHPのDateTimeクラスは、日付と時刻を扱うクラスです。

DateTimeクラスの主な目的は、日付と時刻に関する複雑な処理の簡易化です。

予約システム・データのタイムスタンプなど、さまざまなアプリケーションで、日時を扱う場面は多いですが、日時の計算を正確におこなうのは骨が折れる作業です。

DateTimeクラスを使用すれば、正確かつ効率的に日時を処理できます。

また、DateTimeクラスは、PHPの標準ライブラリに含まれているため、追加のインストールなしで使用できる点も、PHPプログラマーにとって大きな利点です。

dateとの違い

DateTimeクラスは、従来のdate関数と比較していくつかの利点があります。

まず、DateTimeクラスはオブジェクト指向的なアプローチを採用しており、日時データをオブジェクトとして扱え、メソッドチェーンを使用した直感的な操作が可能になります。

例えば、現在の日時から1週間後の日付を取得する場合、以下のように記述できます。

$date = new DateTime();

$oneWeekLater = $date->modify(‘+1 week’)->format(‘Y-m-d’);  // DateTimeの場合

$oneWeekLater = date(‘Y-m-d’, strtotime(‘+1 week’));    // date関数の場合

DateTimeクラスの方が読みやすいコードとなり、複雑な日時操作も直感的に記述できます。

DateTimeImmutableクラスとの違い

DateTimeImmutableクラスでは、メソッドを呼び出すとオブジェクトの情報が変更される代わりに、新しいオブジェクトが返されます。

DateTimeクラスと同様の機能を持ちながら、予期せぬオブジェクトの変更を防げる点が異なるクラスです。

$today = new DateTimeImmutable();    // 次行を実行後も、todayは不変

$oneWeekLater = $today->modify(‘+1 week’)->format(‘Y-m-d’); // 1週間後の日付

DateTimeクラスの使い方

DateTimeクラスの基本的な使い方を見ていきましょう。

まず、インスタンスを作成します。

$date = new DateTime(‘2024-07-20 15:00:00’);    // 指定日時でインスタンス作成

$now  = new DateTime();     // 現在日時のインスタンス作成

formatメソッドでは指定書式で文字列に変換できます。

echo $date->format(‘Y-m-d g:i a’) . \n;   // 2024-07-20 3:00 pm

echo $now->format(‘Y-m-d H:i:s’) . \n;    // 出力例: 2024-08-01 15:00:03

DateTimeクラスは、日時に関するさまざまなメソッドがあり、例えば、日時の加算や減算、タイムゾーンの変換、特定のフォーマットでの出力などがおこなえます。

$diff = $now->diff($date);  // $dateから$nowまで何日あるかを計算

echo $diff->format(‘%a日’) . \n;  // %aは総日数を書式化

 

$oneMonthLater = new DateTime();

$oneMonthLater->modify(‘+2 month’); // 2ヵ月後の日時を計算

DateTimeの機能を活用すると、カレンダーアプリケーションの開発や、予約システムの実装、ログの記録など、日時を扱う多くの場面で効率的なプログラミングが可能になります。

DateTimeクラスの基本的なメソッド

PHPのDateTimeクラスには、日時を扱うためのさまざまなメソッドが用意されています。簡単に使い方を見ていきましょう。

日時のシミュレーション

特定の日時を設定するにはsetDate()、setTime()、setTimestamp()メソッドを使います。

$date = new DateTime();

$date->setDate(2024, 7, 1); // 2024年7月1日に設定

$date->setTime(14, 30, 0); // 14時30分00秒に設定

$date->setTimestamp(1720000000); // UNIXタイムスタンプで設定

日時のフォーマット

日時のフォーマットには、format()メソッドを使います。

format()を使うと、指定した形式で日時を文字列にできます。

echo $date->format(‘Y-m-d H:i:s’); // 2024-07-01 14:30:00

echo $date->format(‘Y年m月d日 H時i分s秒’); // 2024年07月01日 14時30分00秒

日時の計算

日時の計算には、add()、sub()、modify()メソッドを使います。

add()やsub()では時間間隔を表すDateIntervalオブジェクトを引数に使用します。

$date->add(new DateInterval(‘P1D’)); // 1日後

$date->sub(new DateInterval(‘PT1H’)); // 1時間前

$date->modify(‘+1 week’); // 1週間後

日時の比較

日時の比較には、diff()メソッドや比較演算子を使います。

diff()は2つの日時の差を計算し、比較演算子では前後関係を判定できます。

$date1 = new DateTime(‘2024-07-01’);

$date2 = new DateTime(‘2024-08-01’);

echo $date1->diff($date2)->days;    // date1とdate2の差を日数表示 出力: 31

echo $date1 < $date2 ? ‘date1が早い’ : ‘date2が早い’; // date1が早い

タイムゾーンの指定

DateTimeオブジェクトのタイムゾーンを変更するには、setTimezone()メソッドを使います。

引数には、タイムゾーンを表すDateTimeZoneオブジェクトを使用します。

$date = new DateTime(‘now’, new DateTimeZone(‘UTC’));   // 現在時刻、タイムゾーンは世界協定時

$date->setTimezone(new DateTimeZone(‘Asia/Tokyo’));     // タイムゾーンを日本時間に変更する

echo $date->format(‘Y-m-d H:i:s’); // 日本時間を表示

コンストラクタ

DateTimeクラスのコンストラクタは、さまざまな形式で日時を指定できます。文字列やUNIXタイムスタンプなどを使って、DateTimeオブジェクトを作成できます。

$date1 = new DateTime(); // 現在の日時

$date2 = new DateTime(‘2024-07-01 14:30:00’); // 文字列で指定

$date3 = new DateTime(‘@1720000000’); // UNIXタイムスタンプで指定

静的メソッド

DateTimeクラスの静的メソッドには以下のようなものがあります。

  • ・createFromFormat()では、指定の書式の文字列からインスタンスを作成できます。
  • ・getLastErrors()は、エラー情報を取得できます。

$date = DateTime::createFromFormat(‘Y/m/d’, ‘2024/07/01’);

$errors = DateTime::getLastErrors();

まとめ

PHPのDateTimeクラスは、日時の作成、比較、計算、フォーマット変換など、多彩な機能を提供します。

従来のdate関数よりも柔軟で拡張性が高く、コードの可読性も向上します。

本記事を参考に、ぜひDateTimeクラスを実際のプロジェクトで活用してみてください。