解析日期错误

时间:2015-04-01 16:16:25

标签: php parsing date

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

代码:

$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的格式,但没有运气,它似乎完全随机工作....

2 个答案:

答案 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