PHP日期问题 - strtotime不输出它应该是什么?

时间:2010-01-12 15:00:01

标签: php datetime strtotime

我的数据库中有几个空白的DATETIME值(0000-00-0000:00:00)。

每当我通过strtotime运行它们时,它们返回“1263247058”而不是FALSE,它应该根据链接页面上的信息执行:

PHP strtotime() outputs nothing

怎么回事?

感谢。

5 个答案:

答案 0 :(得分:3)

正如docs for strtotime中的一条评论所说,“strtotime("0000-00-00")返回的值因PHP版本而异”。因此,最好对该特定值进行额外检查。

答案 1 :(得分:1)

为什么在其他答案中解释了。此代码将强制该值为false:

if ($db_datetime == 0) {
    $unix_timestamp = false;
} else {
    $unix_timestamp = strtotime($db_datetime);
}

答案 2 :(得分:1)

许多PHP函数在内部依赖于标准C库实现,这可能是strtotime()的情况。这意味着确切的行为取决于PHP运行的操作系统。

我认为最好不依靠strtotime()来检测无效日期。

作为旁注......我猜你正在使用MySQL。可以对其进行配置,使其不接受无效日期:

NO_ZERO_DATE

答案 3 :(得分:0)

适合我:\

$ php -r 'var_dump(strtotime("0000-00-00 00:00:00"));'
bool(false)
$

mac OS上的PHP 5.2.8,以及CentOS 5.2上的PHP 5.2.5。你能尝试相同的测试吗?如果结果不同,您使用的是哪个版本的PHP,以及哪个平台?

FWIW,我觉得你完全可以通过在数据库中存储一个实际的NULL而不是零日期来避免这种情况。

答案 4 :(得分:0)

考虑以下代码的输出(PHP Version 5.3.0):

echo date( "h:i:sa m/d/Y", strtotime( '00:00:00' ) ) . "<br/>" ;
echo date( "h:i:sa m/d/Y", strtotime( '00:00:00 00-00-0000' ) ). "<br/>"  ;

// Output
12:00:00am 01/12/2010
12:00:00am 01/01/1970