2010-04-20 25 views
1
function convertDT($TS) { 
    $TS = strtotime($TS); 
    $TS -= date("Z"); 
    $newTS = date("Y-m-d\TH:i:s\Z", $TS); 
    return $newTS; 
} 

echo "Good: ".convertDT('2010-04-20 01:23:45')."\n"; 
echo "Bad: ".convertDT('2010-31-20 01:23:45')."\n"; 

第二返回日期:1969-12-31T23:00:00ZPHP - 这是为什么日期函数不示数出

为什么?应该这个错误?

回答

3

strtotime()返回false当您给它一个无效的时间戳。 false相当于0如果你在一个整数范围内使用它,所以当你把它传递给这一行:

$newTS = date("Y-m-d\TH:i:s\Z", $TS); 

您有效地创建从0时间戳的日期。根据UNIX时代,0是1970年1月1日,这是您从中获得最终结果的地方。

你最好的选择是soemthing这样的:

$TS = strtotime($TS); 
if($TS === false) { 
    throw new Exception("Invalid timestamp."); 
} 
//etc. 
+0

谢谢,这就是我一直在寻找 – 2010-04-20 19:21:05

0

在您的第二次约会中,您正试图创建一个月31日和第20天的日期。即使您将这些日期颠倒过来,也没有任何意义。可能是一个错字。

+0

是的,我想回到1969年的日期 – 2010-04-20 19:14:00

+0

@Phill,而不是验证并抛出一个错误:'strtotime'的示数,因为你给了它是一个虚假的日期。您可以检查错误是否返回FALSE。在你的例子的第二行中,你基本上每次都会执行'0 - date('Z')',因为FALSE被赋值为0. – ryeguy 2010-04-20 19:18:03

0

阅读本http://php.net/manual/en/function.strtotime.php

错误/异常

每到一个日期/时间函数 调用将产生一个E_NOTICE如果时间 区是无效的,和/或E_STRICT 或使用 系统设置或TZ环境 变量的E_WARNING消息。另请参阅 date_default_timezone_set()

即使输入字符串无效,此函数也不会生成任何错误。