我的数据库中有几个空白的 DATETIME 值(0000-00-00 00:00:00)。
每当我通过 strtotime 运行它们时,它们会返回“1263247058”而不是 FALSE,它应该根据链接页面上的信息执行此操作:
怎么来的?
谢谢。
我的数据库中有几个空白的 DATETIME 值(0000-00-00 00:00:00)。
每当我通过 strtotime 运行它们时,它们会返回“1263247058”而不是 FALSE,它应该根据链接页面上的信息执行此操作:
怎么来的?
谢谢。
正如文档strtotime
中的一条评论所说,“返回的值strtotime("0000-00-00")
因 PHP 版本而异”。因此,最好对该特定值进行额外检查。
How come is explained in the other answers. This code will force the value to false:
if ($db_datetime == 0) {
$unix_timestamp = false;
} else {
$unix_timestamp = strtotime($db_datetime);
}
许多 PHP 函数在内部依赖于标准 C 库实现,这很可能是 strtotime() 的情况。这意味着确切的行为取决于运行 PHP 的操作系统。
我认为最好不要依赖 strtotime() 来检测无效日期。
作为旁注......我想你正在使用MySQL。可以对其进行配置,使其不接受无效日期:
为我工作:\
$ 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 而不是零日期来完全避免这种情况。
Consider the output of the following code (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