PHP DateTime::createFromFormat返回错误的日期

PHP DateTime::createFromFormat返回错误的日期,php,datetime,timezone,Php,Datetime,Timezone,尝试使用太平洋/奥克兰时区和格式字符串“F-Y”运行createFromFormat时。返回的日期是10月1日,尽管我提供了“2019年9月” 我曾尝试在CLI和FPM中的PHP7.3.9和7.2.22上运行它,并在PHP沙箱中联机运行它 这个怎么样,我的朋友: date_default_timezone_set('Pacific/Auckland'); $date = DateTime::createFromFormat('F-Y', 'September-2019'); $new_dat

尝试使用太平洋/奥克兰时区和格式字符串“F-Y”运行
createFromFormat
时。返回的日期是10月1日,尽管我提供了“2019年9月”

我曾尝试在CLI和FPM中的PHP7.3.9和7.2.22上运行它,并在PHP沙箱中联机运行它


这个怎么样,我的朋友:

date_default_timezone_set('Pacific/Auckland');

$date = DateTime::createFromFormat('F-Y', 'September-2019');

$new_date_format = $date->format('Y-m-01');

echo $new_date_format;

这种行为的原因是,如果不指定日期/时间输入的缺失部分,它将使用当前本地日期和时间的值。在奥克兰,这是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');
输出:

2019-09-01

很抱歉,该评论的格式似乎不正确,但仍然无法正常工作。10月31日的事情让人毛骨悚然<代码>php