0

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

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

有时它会起作用,但有时它会显示1970-01-01

示例:2012 年 12 月 10 日有效 2012 年 10 月 13 日无效 显示 1970-01-01

4

6 回答 6

5

请参阅 PHP 的日期和时间格式页面

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

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

$startdate='12-10-2012';
$newstartdate = date('Y-m-d',strtotime($startdate));
于 2012-10-15T10:05:27.203 回答
2

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

$date = DateTime::createFromFormat('d/m/Y', '13/10/2012');
echo $date->format('Y-m-d');
于 2012-10-15T10:06:11.297 回答
1

手册The function expects to be given a string containing an English date format...

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

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

于 2012-10-15T10:06:43.287 回答
1

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

于 2012-10-15T10:06:55.237 回答
0

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

$startdate='12/10/2012'; 
$date1 = strtr($startdate, '/', '-');
echo date('Y-m-d', strtotime($date1));
于 2016-09-08T10:35:45.367 回答
-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;
于 2012-10-15T10:15:05.197 回答