我有一个非常奇怪的错误,我不明白。由于某些原因,某些日期没有正确解析。
代码:
$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调用,它对你的任何一个约会都不起作用。
手动