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

Sim*_*mon 159 php

我非常喜欢这个strtotime()功能,但是用户手册没有提供支持的日期格式的完整描述.strtotime('dd/mm/YYYY')不起作用,它只适用于mm/dd/YYYY格式.

如果我有dd/mm/YYYY格式化日期,我该如何将其转换为YYYY-mm-dd?我可以通过使用explode()函数来实现,但我认为有更好的解决方案.

小智 381

这是简化的解决方案:

$date = '25/05/2010';
$date = str_replace('/', '-', $date);
echo date('Y-m-d', strtotime($date));
Run Code Online (Sandbox Code Playgroud)

结果:

2010-05-25
Run Code Online (Sandbox Code Playgroud)

strtotime文件内容如下:

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

  • 如果你测试它:`echo date('Ym-l',strtotime('01 -01-2010'));`结果是`2010-01-Friday`.所以最后一天到来,取决于你如何指定日期格式到'date`函数. (3认同)
  • @Web Logic我不能理解strtotime()函数的默认格式,如果我写strtotimr('01 -01-2010'),它会理解为dd-mm-YYYY或mm-dd-YYYY格式? (2认同)

sal*_*the 60

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

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

(旁白:!用于将非指定值重置为Unix时间戳,即时间为午夜.)


如果您不想(或不能)使用PHP 5.3,那么strtotime接受的可用日期/时间格式的完整列表将在日期格式手册页上列出.该网页更彻底地描述了这样的事实m/d/Y推断过d/m/Y(但你可以,如答案这里提到,使用d-m-Y,d.m.Yd\tm\tY).


在过去,我还使用了str_replace另一个答案中提到的quicky ,以及将日期字符串自解析为另一种格式,如

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


小智 16

来自STRTOTIME的文章说明:

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

它是如此简单.


Jon*_*Roy 15

这是解决许多问题的好方法:

function datetotime ($date, $format = 'YYYY-MM-DD') {

    if ($format == 'YYYY-MM-DD') list($year, $month, $day) = explode('-', $date);
    if ($format == 'YYYY/MM/DD') list($year, $month, $day) = explode('/', $date);
    if ($format == 'YYYY.MM.DD') list($year, $month, $day) = explode('.', $date);

    if ($format == 'DD-MM-YYYY') list($day, $month, $year) = explode('-', $date);
    if ($format == 'DD/MM/YYYY') list($day, $month, $year) = explode('/', $date);
    if ($format == 'DD.MM.YYYY') list($day, $month, $year) = explode('.', $date);

    if ($format == 'MM-DD-YYYY') list($month, $day, $year) = explode('-', $date);
    if ($format == 'MM/DD/YYYY') list($month, $day, $year) = explode('/', $date);
    if ($format == 'MM.DD.YYYY') list($month, $day, $year) = explode('.', $date);

    return mktime(0, 0, 0, $month, $day, $year);

}
Run Code Online (Sandbox Code Playgroud)


Fi *_*ran 7

$srchDate = date_format(date_create_from_format('d/m/Y', $srchDate), 'Y/m/d');

这对你有用。您可以将字符串转换为自定义日期格式,您可以在其中向 PHP 指定提供给它的字符串的原始格式。既然它是日期格式,您可以将其转换为 PHP 的默认日期格式,这与 MySQL 使用的相同。