当尝试跑步时createFromFormat
使用太平洋/奥克兰时区和格式字符串“F-Y”。尽管我提供了“2019 年 9 月”,但返回的日期是 10 月 1 日。
我尝试在 CLI 和 FPM 中的 PHP 7.3.9 和 7.2.22 上运行它,并在 PHP 沙箱中在线运行它。
<?php
echo DateTime::createFromFormat('F-Y', 'September-2019')
->setTimezone(new DateTimeZone('Pacific/Auckland'))
->format('Y-m-d');
// 2019-10-01
echo DateTime::createFromFormat('F-Y', 'September-2019')
->format('Y-m-d');
// 2019-09-01
在这两个示例中,返回的日期应为 2019-09-01。这不是昨天发生的事。
出现此行为的原因是,当您未指定日期/时间输入的缺失部分时DateTime::createFromFormat https://www.php.net/manual/en/datetime.createfromformat.php,它使用当前本地日期和时间的值。在奥克兰,该日期是 10 月 31 日,因此它会尝试将日期定在 2019 年 9 月 31 日之外,结果显示为 2019 年 10 月 1 日。为避免此问题,请使用!
在格式字符串的开头;这将根据需要替换 1970 年 1 月 1 日 00:00:00(Unix 纪元)中未在时间值中指定的值:
echo DateTime::createFromFormat('!F-Y', 'September-2019')
->setTimeZone(new DateTimeZone('Pacific/Auckland'))
->format('Y-m-d');
Output:
2019-09-01
3v4l.org 上的演示 https://3v4l.org/ANjHT
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)