PHP 日時処理のスニペット集
このページは、PHP の日時処理のスニペットなどをまとめる予定のページです。
目次
注意
- コードのライセンスは CC0 (クレジット表示不要、改変可、商用可) です。
- PHP の日時処理はいくつかの方式があります。
-
- タイムスタンプ型 (
time()
など)
- タイムスタンプ型 (
-
- オブジェクト型 (
DateTime
,DateTimeImmutable
)
- 2-1. オブジェクト指向型 (
->format()
など) - 2-2. 手続き型 (
date_format()
など)
- オブジェクト型 (
-
スニペット
タイムゾーン
date_default_timezone_set('Asia/Tokyo');
フォーマット
$d = new DateTime('2020-01-01');
$s = $d->format('Y/m/d H:i:s'); // 2020/01/01 00:00:00
$d = strtotime('2020-01-01');
$s = date('Y/m/d H:i:s', $d); // 2020/01/01 00:00:00
$s = gmdate('D, d M Y H:i:s T');
$s = gmdate('l, d-M-Y H:i:s T');
月末の取得
月末のオブジェクト、タイムスタンプの取得
$d = new DateTime('2020-01-01');
$d2 = $d->modify('last day of this month');
$d = strtotime('2020-01-01');
$d2 = strtotime('last day of this month', $d);
月末日の取得
$d = new DateTime('2020-01-01');
$d2 = $d->format('t');
$d = strtotime('2020-01-01');
$d2 = strtotime('t', $d);
月の加算
$d = new DateTime('2019-12-31'); // 対象日
$day = $d->format('d'); // 対象日の日にちを取得
$d->modify('first day of +2 month'); // 2か月後の1日に変更 (2020-02-01)
$lastDay = $d->format('t'); // 変更後の月末日を取得
$d2 = new DateTime($d->format('Y-m-') . min($day, $lastDay)); // 対象日の日にちと変更後の月末日の小さいほうを採用
echo $d2->format('Y-m-d'); // 2020-02-29
- 単純に月を加算すると
2019-12-31
の2か月後が2020-02-31
→ 2日あまる →2020-03-02
となってしまうため、いったん1日にしてから月を変更して日にちを調整します。
和暦出力
IntlDateFormatter
$d = new DateTime();
$fmt = new IntlDateFormatter('ja_JP@calendar=japanese', IntlDateFormatter::FULL, IntlDateFormatter::FULL, 'Asia/Tokyo', IntlDateFormatter::TRADITIONAL, 'Gy年M月d日');
$s = $fmt->format($d); // 令和X年X月X日
- 補足
- 環境によって動作しない場合があります。(XAMPP の場合 php.ini の
;extension=intl
をextension=intl
にするして intl を有効にする必要があります。また、ICU ライブラリのバージョンによっては新しい元号定義が存在しないことがあるため想定外の結果になることがあります)
- 環境によって動作しない場合があります。(XAMPP の場合 php.ini の
- 参考
strftime
setlocale(LC_TIME, 'ja_JP.UTF8'); // ロケール変更
$s = strftime('%Ex'); // 令和X年X月X日
- 補足
- 環境によって動作しない場合があります。(Windows では動作しません。また、ロケールファイル (
/usr/share/i18n/locales/ja_JP.UTF8
など) に元号定義が存在しない場合は想定外の結果になります)
- 環境によって動作しない場合があります。(Windows では動作しません。また、ロケールファイル (
- 参考