Strtotime() 不适用于 dd/mm/YYYY 格式
2022-08-30 06:28:58
我真的很喜欢这个功能,但用户手册没有给出支持的日期格式的完整描述。 不起作用,它仅适用于格式。strtotime()
strtotime('dd/mm/YYYY')
mm/dd/YYYY
如果我有格式的日期,我怎么能把它转换为?我可以使用函数来做到这一点,但我认为有更好的解决方案。dd/mm/YYYY
YYYY-mm-dd
explode()
我真的很喜欢这个功能,但用户手册没有给出支持的日期格式的完整描述。 不起作用,它仅适用于格式。strtotime()
strtotime('dd/mm/YYYY')
mm/dd/YYYY
如果我有格式的日期,我怎么能把它转换为?我可以使用函数来做到这一点,但我认为有更好的解决方案。dd/mm/YYYY
YYYY-mm-dd
explode()
以下是简化的解决方案:
$date = '25/05/2010';
$date = str_replace('/', '-', $date);
echo date('Y-m-d', strtotime($date));
结果:
2010-05-25
strtotime
文档如下:
通过查看各个组件之间的分隔符来消除m / d / y格式的日期的歧义:如果分隔符是斜杠(/),则假定为美国m / d / y;而如果分隔符是短划线 (-) 或点 (.),则假定为欧洲 d-m-y 格式。
您可以使用 DateTime::createFromFormat 从自定义格式(从 PHP 5.3 开始)解析日期
$timestamp = DateTime::createFromFormat('!d/m/Y', '23/05/2010')->getTimestamp();
(题外话:!
用于将未指定的值重置为 Unix 时间戳,即时间将为午夜。
如果您不想(或不能)使用 PHP 5.3,则 strtotime 接受的可用日期/时间格式的完整列表将列在日期格式手册页上。该页面更彻底地描述了推断的事实(但您可以,如此处的答案所述,使用 或 )。m/d/Y
d/m/Y
d-m-Y
d.m.Y
d\tm\tY
过去,我还求助于另一个答案中提到的快速,以及将日期字符串自我解析为另一种格式,例如str_replace
$subject = '23/05/2010';
$formatted = vsprintf('%3$04d/%2$02d/%1$02d', sscanf($subject,'%02d/%02d/%04d'));
$timestamp = strtotime($formatted);