DateTime::createFromFormatのフォーマット文字列の!
と|
の説明に「Unix エポックにリセット」と書いてありますが、実はそのタイムゾーンでの1970年1月1日0時0分0秒にリセットされます。
例えば
% php -d date.timezone=Asia/Tokyo -r 'echo(DateTime::createFromFormat("!", "")->format("Y-m-d H:i:s"));'
1970-01-01 00:00:00
となります。説明通りだと1970-01-01 09:00:00
になりそうですがそんなことはありません。
もちろんマニュアルの|
のところの例に書いてある
Y-m-d| は、文字列をパースした結果から年月日を設定し 時分秒には 0 を設定します。
もちゃんと動きます。
ドキュメントのバグとしてバグレポ(#76569)したんだけど一向に直る気配がないですねー。