为什么DateTime :: createFromFormat('d-m-Y H:i A',$ date)-> format('d-m-Y')将日期更改为下午1点后的第二天?
**注意 我认为这可能与“ H”或“ h”的格式有关 我仍在努力弄清楚。.
$date = "04-12-2018 12:59 PM";
$date_input = "04-12-2018 13:00 PM";
echo $date . ' - date <br>';
echo $date_input . ' - date_input <br>';
var_dump($date);
echo '<br/>';
var_dump($date_input);
echo '<br/>';
echo DateTime::createFromFormat('d-m-Y H:i A', $date)->format('d-m-Y') . '<br/>';
echo DateTime::createFromFormat('d-m-Y H:i A', $date_input)->format('d-m-Y') . '<br/>';
结果:
04-12-2018 12:59 PM - date
04-12-2018 13:00 PM - date_input
string(19) "04-12-2018 12:59 PM"
string(19) "04-12-2018 13:00 PM"
04-12-2018
05-12-2018
答案 0 :(得分:0)
您不能有13:00 PM 如果您执行格式化功能,则认为是第二天。
将代码更改为以下解决方案:
**注意:$ date_input和$ another_date的格式为'H或h'&'A'
$date = "04-12-2018 12:59 PM";
$date_input = "04-12-2018 13:00";
$another_date = "04-12-2018 01:00 PM" ;
echo $date . ' - date <br>';
echo $date_input . ' - date_input <br>';
echo $another_date . ' - another_date <br>';
var_dump($date);
echo '<br/>';
var_dump($date_input);
echo '<br/>';
var_dump($another_date);
echo '<br/>';
echo DateTime::createFromFormat('d-m-Y H:i A', $date)->format('d-m-Y') . '<br/>';
echo DateTime::createFromFormat('d-m-Y H:i', $date_input)->format('d-m-Y') . '<br/>';
echo DateTime::createFromFormat('d-m-Y h:i A', $another_date)->format('d-m-Y') . '<br/>';
答案 1 :(得分:0)
“ 13:00 pm”不是有效时间:在12小时时钟中,从1到12。您可以通过调用DateTime::getLastErrors()
来检查解析是否失败:
php > echo DateTime::createFromFormat('d-m-Y H:i A', $date_input)->format('d-m-Y');
05-12-2018
php > print_r(DateTime::getLastErrors());
Array
(
[warning_count] => 1
[warnings] => Array
(
[19] => The parsed time was invalid
)
[error_count] => 0
[errors] => Array
(
)
)
该实现似乎将下午13点视为凌晨1点,就像将“ 11月31日”视为12月1日一样。
答案 2 :(得分:0)
根据PHP documentation of DateTime::__construct()
不存在的值会翻转。
// Non-existent values roll over.
$date = new DateTime('2000-02-30');
echo $date->format('Y-m-d H:i:sP') . "\n";
输出
2000-03-01 00:00:00-05:00
所以它不是bug,而是功能。