我有一个非常奇怪的错误,我不明白。出于某种原因,某些日期未正确解析。
代码:
$day = strtotime($_GET['d']."-".$_GET['m']."-".$_GET['y']);
$dateTimeZone = new DateTimeZone("Europe/Prague");
$dateTime = new DateTime($day, $dateTimeZone);
$offset = ($dateTimeZone->getOffset($dateTime))/3600;
现在真的很奇怪...... 如果我通过某些数字,它可以工作,但它不会与其他人... ...
例如,像这样的网址可以使用:
d=15&m=12&y=2014
但是这个:
d=12&m=12&y=2014
显示
致命错误:未捕获的异常'异常' with message' DateTime :: __ construct():无法解析位置7(4)处的时间字符串(1418252400):意外字符'在
我尝试过它,也改变了strtotime的格式,但没有运气,它似乎完全随机工作....
答案 0 :(得分:3)
当您将timestamp作为DateTime对象的参数发送时,必须使用@
符号作为前缀。请参阅本手册(UNIX时间戳):http://php.net/manual/en/datetime.formats.compound.php
所以,正确的方法是:
$dateTime = new DateTime('@' . $day, $dateTimeZone);
或者,我更喜欢:
$dateTime = DateTime($_GET['y']."-".$_GET['m']."-".$_GET['d']);
答案 1 :(得分:1)
您正在向其发送无效参数。
public DateTime :: __ construct([string $ time =" now" [,DateTimeZone $ timezone = NULL]])
该构造函数需要A date/time string
,而不是您发送的UNIX时间戳。因此例外。删除围绕您放在一起的strtotime
电话。
现在你或其他人可能会问为什么它适用于你的另一个约会呢?不,它即使在那时也不起作用。试试你的工作日期,看看你得到的DateTime日期
echo $dateTime->format("Y-m-d");
1600年4月1日
<强> Fiddle 强>
由于strtotime调用,它对你的任何一个日期都没有(并且不应该工作)。
<强> Manual 强>