12小时到24小时的转换结果是错误的


12 hours to 24 hours conversion gives wrong result

我尝试将23小时格式转换为格式m-d-y h:i,即2014年3月1日1 am

03-01-2014 01:00 am

date_format('03-01-2014 01:00 am','Y-m-d h:i:s')
date('Y-m-d h:i:s',strtotime('03-01-2014 01:00 am')

转换为等效的24小时格式Y-m-d H:i:s,但我得到错误的结果

2014-01-03 01:00:00

它应该给出

2014-03-01 01:00:00

03-01-2014 01:00 am有歧义。是3月1日吗?还是4月3日?从手册:

m/d/y或d-m-y格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠(/),则假定为美式m/d/y;而如果分隔符是破折号(-)或点(.),则假定采用欧洲d-m-y格式

为了避免潜在的歧义,最好尽可能使用ISO 8601 (YYYY-MM-DD)日期或DateTime::createFromFormat()。

$date = DateTime::createFromFormat('m-d-Y h:i a', '03-01-2014 01:00 am');
echo $date->format('Y-m-d H:i:s');

2005-01-30 11:03 pm使用

date('Y-m-d h:i a');

对于2005-01-30 23:03使用

date('Y-m-d H:i');