PHP - 为什么这个日期函数没有错误

时间:2010-04-20 19:10:38

标签: php date format utc

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:00Z

为什么呢?这个错误应该吗?

3 个答案:

答案 0 :(得分:3)

当您为其提供无效的时间戳时,

strtotime()会返回false。如果您在整数上下文中使用false,则0等效于$newTS = date("Y-m-d\TH:i:s\Z", $TS); ,因此当您将其传递给此行时:

0

您实际上是从0的时间戳创建日期。就UNIX时代而言,$TS = strtotime($TS); if($TS === false) { throw new Exception("Invalid timestamp."); } //etc. 是1970年1月1日,也就是你获得最终结果的地方。

你最好的选择就是这样:

{{1}}

答案 1 :(得分:0)

在第二次约会时,您正在尝试创建第31个月和第20天的日期。即使您颠倒了这些日期,也没有意义。可能是一个错字。

答案 2 :(得分:0)

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

  

<强>错误/异常

     

每次调用日期/时间函数   如果时间会产生E_NOTICE   区域无效,和/或E_STRICT   如果使用,则为E_WARNING消息   系统设置或TZ环境   变量。也可以看看   date_default_timezone_set()

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