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

PHP-为什么这个日期函数没有出错,php,date,format,utc,Php,Date,Format,Utc,第二个日期返回:1969-12-31T23:00:00Z 为什么??如果出现此错误?在您的第二个日期,您正在尝试创建31个月和20天的日期。即使你把这些颠倒过来,也没有意义。可能是打字错误。读一下这个 错误/异常 对日期/时间函数的每次调用 如果时间 区域无效,和/或E_严格 或E_警告消息(如果使用 系统设置或TZ环境 变量另见 日期\默认\时区\设置() 即使输入字符串无效,此函数也不会生成任何错误。strotime()在给它一个无效的时间戳时返回falsefalse相当于0,因此当您将其传

第二个日期返回:1969-12-31T23:00:00Z


为什么??如果出现此错误?

在您的第二个日期,您正在尝试创建31个月和20天的日期。即使你把这些颠倒过来,也没有意义。可能是打字错误。

读一下这个

错误/异常

对日期/时间函数的每次调用 如果时间 区域无效,和/或E_严格 或E_警告消息(如果使用 系统设置或TZ环境 变量另见 日期\默认\时区\设置()

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

strotime()
在给它一个无效的时间戳时返回
false
<如果在整数上下文中使用,code>false相当于
0
,因此当您将其传递到此行时:

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";
您实际上是从时间戳
0
创建日期。就UNIX时代而言,
0
是1970年1月1日,这是您获得最终结果的地方

你最好的选择是这样的:

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

是的,我想验证并抛出一个错误,而不是返回date@Phill:
strotime
出错是因为你给它一个假日期。您可以检查它是否在出错时返回FALSE。在示例的第二行中,您基本上每次都在执行
0-date('Z')
,因为FALSE被转换为0。谢谢,这就是我要找的
$TS = strtotime($TS);
if($TS === false) {
    throw new Exception("Invalid timestamp.");
}
//etc.