PHPで扱う日付と時刻の基礎:DateTimeImmutableの活用例
作成日:2024.12.07
PHPで日付や時刻を操作する際、DateTimeImmutableクラスを使用することで、データの安全性と効率的な処理が実現します。本記事では、基本的な使い方から日付の加減算、フォーマット指定、時刻比較まで、実践的な例を通じて解説します。
PHPで日付時刻関連の値を扱うときは、DateTimeImmutableクラスを使うのが便利です。
DateTimeクラスでも良いんですが、PHPの公式マニュアルによると、
警告 DateTime クラスのメソッドをコールすると、 そのインスタンスにカプセル化された情報が変更されます。 そうした変更を防ぎたい場合には、新しいオブジェクトを作るために clone 演算子を使わなければいけません。 オブジェクトの変更を防ぐ、望ましい挙動をデフォルトで実現するには、 DateTime ではなく、 DateTimeImmutable を使います。
とのことなので、基本的には DateTimeImmutable クラスを使うようにしておくのが良さそう。
$date = new DateTimeImmutable();
echo $date->format("Y-m-d H:i:s"); // 2024-12-07 09:13:22
MySQL等のデータベースのdatetime型の値を引っ張ってきて、そのまま突っ込めば書式の整形も簡単。
フォーマットの指定は、DateTimeInterface::formatを参照。
// $db_datetime に MySQLデータベースのdatetime型の値が入ってると仮定
$date = new DateTimeImmutable($db_datetime);
echo $date->format("Y.m.d(D)"); // 2024.12.07(Sun)
n分後、n日後などの加算、n分前、n日前などの減算も簡単。
modifierの書式についてはサポートする日付と時刻の書式を参照。
$date = new DateTimeImmutable();
echo $date->modify("+5 minutes")->format("Y-m-d H:i:s"); // 5分後
echo $date->modify("+1 days")->format("Y-m-d H:i:s"); // 1日後
echo $date->modify("-5 minutes")->format("Y-m-d H:i:s"); // 5分前
echo $date->modify("-1 days")->format("Y-m-d H:i:s"); // 1日前
「次の日曜日」みたいな指定ができるのはありがたいケースが時々ありますね。
$date = new DateTimeImmutable();
echo $date->modify("sunday")->format("Y-m-d H:i:s"); // 次の日曜日;
値の現在時刻との比較とかも簡単。
$current_time = new DateTimeImmutable(); // 現在時刻
// $db_datetime に MySQLデータベースのdatetime型の値(例えば特定のURLの表示有効期限)が入ってると仮定
if($current_time > new DateTimeImmutable($db_datetime)){
// 有効期限切れのエラー処理
die('URLの有効期限切れです');
}
SimpleSAMLphpを使ったPHPアプリケーションのSSO対応ガイド
2025.02.11
SimpleSAMLphpを使ってPHPアプリケーションにSSO機能を追加する方法を紹介します。Microsoft Entra IDとの連携方法や、認証情報の取得方法について詳しく解説します。
Microsoft Entra IDとSimpleSAMLphpを利用したSAML認証SSO構築ガイド
2025.01.26
ローカル環境でMicrosoft Entra IDと連携したSAML認証のシングルサインオンを実現するための手順を紹介します。SimpleSAMLphpを利用した設定方法や、Microsoft側の構成変更について詳しく解説しています。
PHPで文字列をスペースで区切って配列に変換するテクニック
2025.02.09
PHPでキーワード検索を実装する際などに、文字列をスペースで区切って配列に変換する方法を解説します。全角スペースの変換や空要素の削除についても詳しく説明します。
PHPでmPDFを使ってHTMLをPDFに変換する方法
2025.02.07
PHPのライブラリmPDFを使用して、HTMLドキュメントをPDFとして出力する方法を詳しく解説します。インストールから日本語対応まで、具体的なコード例を交えて説明します。