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

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

PHP的strtotime()什么也不输出

为什么?

感谢。

有帮助吗?

解决方案

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

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

作为一个侧面说明...我相信你正在使用MySQL。它可以配置它,所以它不会接受无效日期:

NO_ZERO_DATE

其他提示

如在文档为strtotime 说的评论之一,“通过strtotime("0000-00-00")返回的值由PHP版本而异”。所以,这是更好地做特定值的额外的检查。

怎么进来的其他答案解释。此代码将值强制为false:

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

考虑下面的代码的输出(PHP版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

适用于我:\

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

在Mac OS,以及在CentOS 5.2 PHP 5.2.5 PHP 5.2.8。你可以尝试同样的试验?如果结果出现不同的,你使用的是什么版本的PHP,以及哪个平台?

FWIW,这让我感到,你可以通过在数据库中,而不是零日期存储的实际NULL完全避免这种整个局势。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top