Strtotime() 不适用于 dd/mm/YYYY 格式

php
2022-08-30 06:28:58

我真的很喜欢这个功能,但用户手册没有给出支持的日期格式的完整描述。 不起作用,它仅适用于格式。strtotime()strtotime('dd/mm/YYYY')mm/dd/YYYY

如果我有格式的日期,我怎么能把它转换为?我可以使用函数来做到这一点,但我认为有更好的解决方案。dd/mm/YYYYYYYY-mm-ddexplode()


答案 1

以下是简化的解决方案:

$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 格式。


答案 2

您可以使用 DateTime::createFromFormat 从自定义格式(从 PHP 5.3 开始)解析日期

$timestamp = DateTime::createFromFormat('!d/m/Y', '23/05/2010')->getTimestamp();

(题外话: 用于将未指定的值重置为 Unix 时间戳,即时间将为午夜。


如果您不想(或不能)使用 PHP 5.3,则 strtotime 接受的可用日期/时间格式的完整列表将列在日期格式手册页上。该页面更彻底地描述了推断的事实(但您可以,如此处的答案所述,使用 或 )。m/d/Yd/m/Yd-m-Yd.m.Yd\tm\tY


过去,我还求助于另一个答案中提到的快速,以及将日期字符串自我解析为另一种格式,例如str_replace

$subject   = '23/05/2010';
$formatted = vsprintf('%3$04d/%2$02d/%1$02d', sscanf($subject,'%02d/%02d/%04d'));
$timestamp = strtotime($formatted);

推荐