分析日期错误


Parsing date error

我有一个非常奇怪的错误,我不明白。由于某些原因,某些日期没有正确解析。

代码:

$day = strtotime($_GET['d']."-".$_GET['m']."-".$_GET['y']);
$dateTimeZone = new DateTimeZone("Europe/Prague");
$dateTime = new DateTime($day, $dateTimeZone);
$offset = ($dateTimeZone->getOffset($dateTime))/3600;

现在真正奇怪的是。。。。如果我通过某些数字,它是有效的,但它不与其他人。。。

例如,像这样的URL可以工作:

d=15&m=12&y=2014

但是这个:

d=12&m=12&y=2014

显示

致命错误:未捕获异常"exception",消息为"DateTime::__construct():无法分析中位置7(4)处的时间字符串(1418252400):意外字符"

我试过用它做实验,也改变了strtotime的格式,但运气不好,它似乎完全是随机工作的。。。。

当您将时间戳作为DateTime对象的参数发送时,必须使用@符号作为前缀。请参阅本手册(UNIX时间戳):http://php.net/manual/en/datetime.formats.compound.php

因此,正确的方法是:

$dateTime = new DateTime('@' . $day, $dateTimeZone);

或者,我更喜欢:

$dateTime = DateTime($_GET['y']."-".$_GET['m']."-".$_GET['d']);

您发送给它的是一个无效参数。

public DateTime::__construct([string$time="now"[,DateTimeZone$timezone=NULL]])

该构造函数需要A date/time string,而不是发送时的UNIX时间戳。因此出现了例外。在你安排的日期前后取消strtotime通话。

现在你或其他人可能会问,为什么这对你的另一次约会有效?不,即使那样也不行。试试你的工作日期,看看你得到的日期时间

echo $dateTime->format("Y-m-d");    

1600-04-01

Fiddle

由于strtotime调用,它对你的任何一个约会都不起作用。

手动