strftime ロケールの設定に基づいてローカルな日付・時間をフォーマットする &warn.deprecated.function-8-1-0.alternatives; date IntlDateFormatter::format &reftitle.description; stringfalsestrftime stringformat intnulltimestamp&null; ローカルの時刻・日付を、ロケール設定にもとづいてフォーマットします。 月および曜日の名前、およびその他の言語依存の文字列は、 setlocale で設定された現在のロケールを尊重して表示されます。 使用する C ライブラリで、すべての変換指定子がサポートされているとは限りません。 そのような場合、該当する変換指定子は PHP の strftime ではサポートされません。 また、全てのプラットフォームが負のタイムスタンプをサポートしているわけではないため、 Unix Epoch (1970 年 1 月 1 日)以前の日付を扱えないかもしれません。 つまり、Windows や一部の Linux ディストリビューション、そしてその他のごく一部の オペレーティングシステム上では %e、%T、%R および %D (あるいはこれ以外も) が Jan 1, 1970 より前の日付について動作しないということです。 Windwos システム上でサポートされる変換指定子の概要については、 MSDN に掲載されています。 Instead use the IntlDateFormatter::format method. &reftitle.parameters; format 次の変換指定子が <parameter>format</parameter> パラメータ用の文字列として認識されます format 説明 戻り値の例 --- --- %a 短縮された曜日の名前 Sun から Sat %A 完全な曜日の名前 Sunday から Saturday %d 10 進数で 2 桁の日付 (先頭のゼロつき) 01 から 31 %e 1 桁の場合は先頭にスペースをいれた日付。 Windows ではそのようには実装されていません。詳細は以下を参照ください。 1 から 31 %j 3 桁で先頭にゼロを含む年間での日付 001 から 366 %u ISO-8601 数値表現であらわした曜日 1 (月曜日) から 7 (日曜日) %w 数値表現であらわした曜日 0 (日曜日) から 6 (土曜日) --- --- %U 指定した年の週番号。最初の日曜日を第一週の開始日とする 13 (年間の第 13 週の場合) %V ISO-8601:1988 で規定された、指定した年の週番号。 週の開始日は月曜日で、第 1 週は少なくとも 4 日はあることになる 01 から 53 (53 は年をまたがる週になります) %W その年の週番号の数値表現。最初の月曜日を最初の週の初日とする 46 (46 番目の週の場合。開始日は月曜日) --- --- %b 現在のロケールに基づく短縮された月の名前 Jan から Dec %B 現在のロケールに基づく完全な月の名前 January から December %h 現在のロケールに基づく短縮された月の名前 (%b のエイリアス) Jan から Dec %m 2 桁であらわした月 01 (1 月) から 12 (12 月) --- --- %C 2 桁であらわした世紀 (年を 100 で割り、整数に丸めたもの) 20 正規の場合は 19 %g 2 桁であらわした年。ISO-8601:1988 標準形式 (%V を参照) 2009 年 1 月 6 日の場合は 09 %G %g の 4 桁完全版 2009 年 1 月 3 日の場合は 2009 %y 2 桁であらわした年 2009 年の場合は 09、1979 年の場合は 79 %Y 4 桁であらわした年 2038 --- --- %H 2 桁であらわした 24 時間制の時間 00 から 23 %k 24 時間制の時間で、1 桁の場合は先頭にスペースをつけたもの 0 から 23 %I 2 桁であらわした 12 時間制の時間 01 から 12 %l (小文字の 'L') 12 時間制の時間で、1 桁の場合は先頭にスペースをつけたもの 1 から 12 %M 2 桁であらわした分 00 から 59 %p 指定した時刻に応じた大文字の 'AM' あるいは 'PM' 00:31 なら AM、22:23 なら PM。 正確な結果はオペレーティングシステムに依存します。 (a.m. のような) 小文字やドット付きの結果を返すこともあります。 %P 指定した時刻に応じた小文字の 'am' あるいは 'pm' 00:31 なら am、22:23 なら pm。 全てのオペレーティングシステムでサポートされているとは限りません。 %r "%I:%M:%S %p" と同じ 21:34:17 なら 09:34:17 PM %R "%H:%M" と同じ 12:35 AM なら 00:35、4:44 PM なら 16:44 %S 2 桁であらわした秒 00 から 59 %T "%H:%M:%S" と同じ 09:34:17 PM なら 21:34:17 %X ロケールに基づいた時刻の表現。日付は含まない 03:59:16 あるいは 15:59:16 %z タイムゾーンオフセット。Windows では違う実装になっています。詳細は後述します。 東海岸時刻なら -0500 %Z タイムゾーンの略称。Windows では違う実装になっています。詳細は後述します。 東海岸時刻なら EST タイムスタンプ --- --- %c 現在のロケールにもとづく日付と時間の表現 2009 年 2 月 5 日 午前 12:45:10 なら Tue Feb 5 00:45:10 2009 %D "%m/%d/%y" と同じ 2009 年 2 月 5 日なら 02/05/09 %F "%Y-%m-%d" と同じ (データベースのタイムスタンプとして一般的) 2009 年 2 月 5 日なら 2009-02-05 %s Unix エポックからのタイムスタンプ (time 関数と同じ) 1979 年 9 月 10 日午前 08:40:00 なら 305815200 %x 現在のロケールにもとづく日付の表現 (時間は除く) 2009 年 2 月 5 日なら 02/05/09 その他 --- --- %n 改行文字 ("\n") --- %t タブ文字 ("\t") --- %% パーセント文字 ("%") ---
ISO-9889:1999 に反して、Sun Solaris は日曜日を 1 としています。 そのため、%u はこのマニュアルの説明どおりに機能しないかもしれません。 Windows 限定: Windows 上では %e に対応していません。 この値が欲しければ、代わりに %#d を使いましょう。 クロスプラットフォーム対応の関数を書く方法をこの後の例で示します。 %z%Z は、どちらもタイムゾーン名を返します。オフセットや略称は返しません。 macOS と musl 限定: %P 修飾子は macOS 版の実装ではサポートされていません。
&date.timestamp.description;
&reftitle.returnvalues; 指定した timestamp または timestamp が指定されていない場合に現在のローカル時間を用いて、 指定したフォーマット文字列に基づき文字列をフォーマットして返します。 月および曜日の名前、およびその他の言語依存の文字列は、 setlocale で設定された現在のロケールを尊重して表示されます。 この関数は、format が空だったり、 サポートされていない変換指定子が含まれていたり、 返される文字列の長さが 4095 より大きい場合は、&false; を返します。 &reftitle.errors; &date.timezone.errors.description; 出力内容は元となった C ライブラリに依存するため、サポートしていない変換指定子もあります。 Windows では、対応していない変換指定子を渡すと 5 つの E_WARNING メッセージが出て &false; を返します。 その他のオペレーティングシステムでは特に E_WARNING メッセージは出ず、 変換指定子が (変換されずに) そのまま出力されます。 &reftitle.changelog; &Version; &Description; 8.0.0 timestamp は、nullable になりました。 &reftitle.examples; この例は、それぞれのロケールがシステムにインストールされている場合にのみ動作します。 <function>strftime</function> のロケールの例 ]]> ISO 8601:1988 の週番号の例 ]]> <literal>%e</literal> 修飾子を使う、クロスプラットフォーム対応の例 ]]> すべての書式の表示 'A full textual representation of the day', 'B' => 'Full month name, based on the locale', 'C' => 'Two digit representation of the century (year divided by 100, truncated to an integer)', 'D' => 'Same as "%m/%d/%y"', 'E' => '', 'F' => 'Same as "%Y-%m-%d"', 'G' => 'The full four-digit version of %g', 'H' => 'Two digit representation of the hour in 24-hour format', 'I' => 'Two digit representation of the hour in 12-hour format', 'J' => '', 'K' => '', 'L' => '', 'M' => 'Two digit representation of the minute', 'N' => '', 'O' => '', 'P' => 'lower-case "am" or "pm" based on the given time', 'Q' => '', 'R' => 'Same as "%H:%M"', 'S' => 'Two digit representation of the second', 'T' => 'Same as "%H:%M:%S"', 'U' => 'Week number of the given year, starting with the first Sunday as the first week', 'V' => 'ISO-8601:1988 week number of the given year, starting with the first week of the year with at least 4 weekdays, with Monday being the start of the week', 'W' => 'A numeric representation of the week of the year, starting with the first Monday as the first week', 'X' => 'Preferred time representation based on locale, without the date', 'Y' => 'Four digit representation for the year', 'Z' => 'The time zone offset/abbreviation option NOT given by %z (depends on operating system)', 'a' => 'An abbreviated textual representation of the day', 'b' => 'Abbreviated month name, based on the locale', 'c' => 'Preferred date and time stamp based on local', 'd' => 'Two-digit day of the month (with leading zeros)', 'e' => 'Day of the month, with a space preceding single digits', 'f' => '', 'g' => 'Two digit representation of the year going by ISO-8601:1988 standards (see %V)', 'h' => 'Abbreviated month name, based on the locale (an alias of %b)', 'i' => '', 'j' => 'Day of the year, 3 digits with leading zeros', 'k' => 'Hour in 24-hour format, with a space preceding single digits', 'l' => 'Hour in 12-hour format, with a space preceding single digits', 'm' => 'Two digit representation of the month', 'n' => 'A newline character ("\n")', 'o' => '', 'p' => 'UPPER-CASE "AM" or "PM" based on the given time', 'q' => '', 'r' => 'Same as "%I:%M:%S %p"', 's' => 'Unix Epoch Time timestamp', 't' => 'A Tab character ("\t")', 'u' => 'ISO-8601 numeric representation of the day of the week', 'v' => '', 'w' => 'Numeric representation of the day of the week', 'x' => 'Preferred date representation based on locale, without the time', 'y' => 'Two digit representation of the year', 'z' => 'Either the time zone offset from UTC or the abbreviation (depends on operating system)', '%' => 'A literal percentage character ("%")', ); // 結果 $strftimeValues = array(); // 書式を評価してエラーを抑制します foreach ($strftimeFormats as $format => $description) { if (false !== ($value = @strftime("%{$format}"))) { $strftimeValues[$format] = $value; } } // 最長の値を探します $maxValueLength = 2 + max(array_map('strlen', $strftimeValues)); // 既知の書式を表示します foreach ($strftimeValues as $format => $value) { echo "Known format : '{$format}' = ", str_pad("'{$value}'", $maxValueLength), " ( {$strftimeFormats[$format]} )\n"; } // 未知の書式を表示します foreach (array_diff_key($strftimeFormats, $strftimeValues) as $format => $description) { echo "Unknown format : '{$format}' ", str_pad(' ', $maxValueLength), ($description ? " ( {$description} )" : ''), "\n"; } ?> ]]> &example.outputs.similar; &reftitle.notes; ISO 8601:1988 week numbers に基づいている %G と %V は、 もしナンバリングシステムが完全に理解されていなければ 期待とは違う結果をもたらします。 このマニュアルの %V の例を参照ください。 &reftitle.seealso; IntlDateFormatter::format DateTimeInterface::format オンラインの strftime() 書式デザインツール setlocale mktime strptime gmstrftime Open Group による strftime の定義