PHP入門 DateTimeクラス 日付/時刻値のフォーマットで整形する(formatメソッド)
日付/時刻値を整形するには、formatメソッドを使います。
構文:formatメソッド
DateTime::format(string $format): string| $format | 書式文字列 |
書式文字列には、記述子を含めることができます。記述子とは、書式文字列の中で意味を持った文字列のことで、たとえば「Y」は実行時に4桁の年で置き換えれます。
書式文字列で利用可能な記述子
| 記述子 | 概要 | 値 |
|---|---|---|
| a | 午前/午後 | am | pm |
| A | 午前/午後 | AM | PM |
| d | 日 | 01~31 |
| D | 曜日(省略形) | Mon~Sun |
| F | 月(長い形式) | January~December |
| h | 時(12時間単位) | 01~12 |
| H | 時(24時間単位) | 00~23 |
| g | 時(12時間単位) | 01~12 |
| G | 時(24時間単位) | 00~23 |
| i | 分 | 00~59 |
| j | 日 | 1~31 |
| l | 曜日(長い形式) | Monday~Sunday |
| L | 閏年であるか | 0|1 |
| m | 月 | 01~12 |
| N | ISO8601形式の曜日 | 1(月曜)~7(日曜) |
| n | 月 | 1~12 |
| M | 月(省略形) | Jan~Dec |
| c | SO8601形式日付 | 2021-05-15T 15:15:10+0900 |
| r | RFC822フォーマットの日付 | Sat, 15 May 2021 15:16:10 +0900 |
| s | 秒 | 00~59 |
| S | 序数を表す接頭辞 | st | nd |th |
| t | 月の日数 | 28~31 |
| O | グリニッジ標準時との時差 | +0900 |
| P | グリニッジ標準時との時差 | +09:00 |
| T | タイムゾーン | MDT |
| U | タイムスタンプ | 1621059370 |
| u | マイクロ秒 | 513234 |
| v | ミリ秒 | 786 |
| W | 年の通算週 | 39 |
| w | 曜日 | 0(日曜)~6(土曜) |
| Y | 年(4桁) | 2021 |
| y | 年(2桁) | 21 |
| z | 年間の通算日 | 0~365 |
| Z | タイムゾーンのオフセット秒数 | -43200~50400 |
主な書式文字列(DateTimeクラスの定数)
| 定数 | 書式文字列 | 結果 |
|---|---|---|
| ATOM | Y-m-d\TH:i:sP | 2021-06-25T 14:35:59+0900 |
| COOKIE | I,d-M-Y H:i:s T | Friday,25-Jun-2021 14:35:59 JST |
| SIO8601 | Y-m-d\TH:i:sO | 2021-06-25T 14:35:59+0900 |
| RFC822 | D, d M y H:i:s O | Fri, 25 Jun 21 14:35:59 +0900 |
| RFC850 | I, d-M-y H:I:s T | Friday,25-Jun-21 14:35:59 JST |
| RFC1036 | D, d M y H:i:s O | Fri, 25 Jun 21 14:35:59 +0900 |
| RFC1123 | D, d M y H:i:s O | Fri, 25 Jun 2021 14:35:59 +0900 |
| RFC7231 | D, d M y H:i:s \G\M\T | Fri, 25 Jun 21 14:35:59 GMT |
| RFC2822 | D, d M y H:i:s O | Fri, 25 Jun 2021 14:35:59 +0900 |
| RFC3339 | Y-m-d\TH:i:sP | 2021-06-25T 14:35:59+0900 |
| FC3339_EXTENDED | Y-m-d\TH:i:s,vP | 2021-06-25T 14:35:59.000+0900 |
| RSS | D, d M y H:i:s O | Fri, 25 Jun 2021 14:35:59+0900 |
| W3C | Y-m-d\TH:i:sP | 2021-06-25T 14:35:59+09:00 |
例
<?php
$now = new DateTime();
$now->setTimestamp(time());
print $now->format('Y年m月d日 (D) g:i:s a').'<br>'; //➊
print $now->format('当月の日数:t日').'<br>'; //➋
print $now->format('L').'<br>'; //➌
print $now->format(DateTime::RSS); //➍
➊は、文字列リテラルと複数の記述しを組み合わせた例。DateTimeオブジェクトは、そのままでは出力できないので、printなどの命令に渡す前にformatメソッドで文字列形式に変換する必要があります。➋➌のように記述子単体で指定してもかまいません。日付/数値値から特定の要素だけを取り出したい場合に利用できます。特殊な記述子として、当月の日数を求める「t」や閏年であるか判定する「L」などもあります。DateTimeクラスでは特定の書式文字列を定数としてあらかじめ公開しています。(❹)これらの定数をformatメソッドの引数として直接指定することもできます。