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() の使用は避けること
目次