为什么strtotime()返回的日期不正确?

6

我正在使用以下代码

$t = strtotime('Saturday, 28 Dec, 2013');
echo date('d/m/Y H:i',$t);
// output : 03/01/2015 20:13

$t = strtotime('Wednesday, 01 Jan, 2014');
echo date('d/m/Y H:i',$t);
// output: 01/01/2014 20:14

第一个例子输出了错误的日期,而第二个例子输出了正确的日期。
为什么会这样,我该如何修复它?

你有什么问题需要问吗? - putvande
@putvande 自解释。为什么“2013年12月28日星期六”被解析为输出“2015年1月3日”? - Niet the Dark Absol
6
使用 $t = strtotime('Saturday, 28 Dec 2013'); 这行代码。 - Clive
@user2727841 我相信他做了。 - superphonic
3
问题很直接,没有必要刻意混淆视听。请保持简单明了。 - Andy
2个回答

7
在月份后面有一个不必要的逗号,删除它,你的代码就会按预期工作:
$t = strtotime('Saturday, 28 Dec 2013');
echo date('d/m/Y H:i',$t);

$t = strtotime('Wednesday, 01 Jan 2014');
echo date('d/m/Y H:i',$t);

不过,我建议你使用DateTime类来替代这种方法。这样,你可以使用任何日期格式:

$date = DateTime::createFromFormat('l, d M, Y', 'Saturday, 28 Dec, 2013');
echo $date->format('d/m/Y H:i');

$date = DateTime::createFromFormat('l, d M, Y', 'Wednesday, 01 Jan, 2014');
echo $date->format('d/m/Y H:i');

7

strtotime只能识别特定的日期格式。如果您的输入不符合这些格式之一,则会尽力猜测,但结果可能会有所不同。

请尝试以下操作:

$t = date_create_from_format("D, d M, Y","Saturday, 28 Dec, 2013");
echo date_format($t,"d/m/Y H:i");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接