为什么strtotime()给出了错误的日期?

anh*_*khn 6 php strtotime

我正在使用以下代码

$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
Run Code Online (Sandbox Code Playgroud)

第一个示例打印出错误的日期,第二个示例打印出正确的日期.

为什么这样,我该如何解决?

Nie*_*sol 7

strtotime只了解一组特定的格式.如果您的输入不是这些格式之一,它会尽力猜测,但正如您所看到的,结果可能会有所不同.

试试这个:

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


Peo*_*eon 6

这个月之后你有一个不必要的逗号.删除它,您的代码将按预期工作:

$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);
Run Code Online (Sandbox Code Playgroud)

但我建议你使用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');
Run Code Online (Sandbox Code Playgroud)