在php 1970-01-01中的日期转换

时间:2012-10-15 10:03:01

标签: php

大家好我正在使用日期转换

$startdate='12/10/2012'; 
$newstartdate = date('Y-m-d',strtotime($startdate));

有一段时间它有效,但有一段时间显示 1970-01-01

示例:12/10/2012有效          13/10/2012无法显示1970-01-01

6 个答案:

答案 0 :(得分:5)

请参阅PHP的date and time formats page

如果您使用/个字符来分隔日期,则会将其视为mm/dd/yy。年仅有12个月。

对于合理顺序的日期,请使用连字符。

$startdate='12-10-2012';
$newstartdate = date('Y-m-d',strtotime($startdate));

答案 1 :(得分:2)

使用DateTime::createFromFormat指定日期格式。

$date = DateTime::createFromFormat('d/m/Y', '13/10/2012');
echo $date->format('Y-m-d');

答案 2 :(得分:1)

来自manualThe function expects to be given a string containing an English date format...

“英语”中的日期13/10/2012(文档错误;应该说“美国美国”)格式表示第13个月的第十天。格里高利历中不存在第13个月,因此strtotime给出失败结果0,如果用作Unix时间戳,则转换为1970-01-01。

使用strftime处理格式不同的日期。

答案 3 :(得分:1)

这可能是因为PHP假设“12/10/2012”是2012年12月10日(这很好)而“13/10/2012”将是未定义月份的第10个,因此它不能正确计算。

答案 4 :(得分:0)

以下代码可能有所帮助。它将/替换为-

$startdate='12/10/2012'; 
$date1 = strtr($startdate, '/', '-');
echo date('Y-m-d', strtotime($date1));

答案 5 :(得分:-1)

按照上面提到的日期类和链接来渲染输出,但如果你仍然坚持使用尝试以这种方式做(只是一个学习方法来深入研究PHP,但这是非常糟糕的代码片段:P)     

$startdate1='13/10/2012'; 
$myarr = explode('/',$startdate1);

$mynewdate = $myarr[1].'/'.$myarr[0].'/'.$myarr[2];

$newstartdate1 = date('Y-m-d',strtotime($mynewdate));

echo $newstartdate1;