date_create_from_format不会返回预期结果

时间:2013-09-29 20:40:51

标签: php date datetime

我刚试过,

date_create_from_format('Ym','201302')

我猜是因为今天是第29届,它实际上是在3月1日让我回来了。

我希望能回来2013-02-01 00:00:00

是否有一个不同的功能可以“正确”解析日期?如果没有,我可以自己提取,不是什么大不了的事。

2 个答案:

答案 0 :(得分:5)

  

如果format不包含字符!,则format中未指定的部分生成时间将设置为当前系统时间。

     

如果format包含字符!,则format中未提供部分生成时间,以及!左侧的值,将设置为Unix纪元的相应值。

     

Unix纪元是1970-01-01 00:00:00 UTC。   (DateTime Manual

因此,在!字符串的开头添加format可以解决您的问题。

答案 1 :(得分:0)

TheWolf's solution似乎工作得很好,但这是我开始写作的另一种选择:

function CompactStrToTime($str) {
    $year = strlen($str)>=4 ? substr($str,0,4) : date('Y');
    $month = strlen($str)>=6 ? substr($str,4,2) : 1;
    $day = strlen($str)>=8 ? substr($str,6,2) : 1;
    $hour = strlen($str)>=10 ? substr($str,8,2) : 0;
    $min = strlen($str)>=12 ? substr($str,10,2) : 0;
    $sec = strlen($str)>=14 ? substr($str,12,2) : 0;
    return mktime($hour,$min,$sec,$month,$day,$year);
}