1. ホーム 
  2. 備忘録 
  3. PHP

DateTimeクラス

はじめに

DateTimeクラスは日付と時刻を表現するクラスである

時刻はタイムゾーンによって変化するため、最初にPHPの設定ファイル(php.ini)で基本となるタイムゾーンを設定する

#; 日本時刻に設定
date.timezone = "Asia/Tokyo"

他にも使用するタイミングでタイムゾーンを設定することもできる

使用方法はオブジェクト指向型と手続き型がある

新たにコードを書いていくなら基本的にオブジェクト指向型で良いと思う

// オブジェクト指向 - 第二引数に指定
$date = new DateTime('2023-07-11', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

// setTimezone()でタイムゾーンを書き換え
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";

//=====================================================//

// 手続き型 - 作成時に第二引数で指定
$date = date_create('2023-07-11', timezone_open('Pacific/Nauru'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";

// date_timezone_set()でタイムゾーンを書き換え
date_timezone_set($date, timezone_open('Pacific/Chatham'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";

日付フォーマットを指定する

時刻を文字列に変換するときフォーマット文字を使うことで任意の形式に整えることができる

よく使うフォーマット文字を以下にまとめる

フォーマット文字 用途
Y 4桁の西暦
m 0埋めありの2桁の月
n 0埋めなしの月
d 0埋めありの2桁の日付
j 0埋めなしの日付
w 0(日曜)~6(土曜)の数字で表した曜日
H 0埋めあり 24時間単位の時
h 0埋めあり 12時間単位の時
i 0埋めあり 2桁の分
s 0埋めあり 2桁の秒

実際のコードは例えば下記のような使い方になる

// 現在時刻でDateTimeクラス生成.
$now = new DateTime();
// フォーマットを指定して文字列に変換
$str = $now->format('Y-m-d H:i:s');
// 2023-07-11 17:38:03 が表示される
echo $str;

日時を変更する modify

public DateTime::modify(string $modifier): DateTime|false

modify() によって作成したDateTimeクラスの日時を変更することができる

$date = new DateTime('2023-7-11 12:00:00');

// 1時間加算する
$date->modify('+1 hour');
// 2023-07-11 13:00:00
echo $date->format('Y-m-d H:i:s');

// 1日加算して3時間減算する
$date->modify('+1 day -3 hour');
// 2023-07-12 10:00:00
echo $date->format('Y-m-d H:i:s');

注意

2038年問題があるため、date関数/strtotime() の使用は避けること


    参考文献

  1. 公式ドキュメント