PHP 日時処理のスニペット集

このページは、PHP の日時処理のスニペットなどをまとめる予定のページです。

目次

注意

  • コードのライセンスは CC0 (クレジット表示不要、改変可、商用可) です。
  • PHP の日時処理はいくつかの方式があります。
      1. タイムスタンプ型 (time() など)
      1. オブジェクト型 (DateTime, DateTimeImmutable)
      • 2-1. オブジェクト指向型 (->format() など)
      • 2-2. 手続き型 (date_format() など)

スニペット

タイムゾーン

タイムゾーンのセット (JST)
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
RFC 7231 (IMF-fixdate) 形式 (例 Sun, 03 Apr 2022 00:00:00 GMT)
$s = gmdate('D, d M Y H:i:s T');
RFC 850形式 (例 Sunday, 03-Apr-2022 00:00:00 GMT)
$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

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=intlextension=intl にするして intl を有効にする必要があります。また、ICU ライブラリのバージョンによっては新しい元号定義が存在しないことがあるため想定外の結果になることがあります)
  • 参考

strftime

strftime
setlocale(LC_TIME, 'ja_JP.UTF8'); // ロケール変更
$s = strftime('%Ex'); // 令和X年X月X日
  • 補足
    • 環境によって動作しない場合があります。(Windows では動作しません。また、ロケールファイル (/usr/share/i18n/locales/ja_JP.UTF8 など) に元号定義が存在しない場合は想定外の結果になります)
  • 参考