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
为什么呢?这个错误应该吗?
答案 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()
即使输入字符串无效,此函数也不会产生任何错误。