PHP 日期问题 - strtotime 没有输出它应该输出的内容?

发布于 2024-08-17 09:27:48 字数 278 浏览 6 评论 0原文

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

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

PHP strtotime() 不输出任何内容

为什么呢?

谢谢。

I have a couple of blanks DATETIME values(0000-00-00 00:00:00) in my database.

Whenever i run those through strtotime, they return "1263247058" instead of FALSE, which it should do according to the info on the linked page:

PHP strtotime() outputs nothing

How come?

Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

半世晨晓 2024-08-24 09:27:48

作为strtotime文档中的评论之一 表示“strtotime("0000-00-00") 返回的值因 PHP 版本而异”。因此,最好对该特定值进行额外检查。

As one of the comments in the docs for strtotime says, "the value returned by strtotime("0000-00-00") varies by PHP version". So, it's better to do an additional check for that specific value.

终陌 2024-08-24 09:27:48

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

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

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

NO_ZERO_DATE

Many PHP functions rely internally on the standard C library implementation and it's likely that this is the case of strtotime(). That means that the exact behaviour depends on the operating system PHP is running on.

I think it's better not to rely on strtotime() to detect invalid dates.

As a side note... I presume you are using MySQL. It's possible to configure it so it won't accept invalid dates:

NO_ZERO_DATE

盛夏已如深秋| 2024-08-24 09:27:48

怎么来的,其他答案已经解释了。此代码将强制该值为 false:

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

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);
}
蓝眸 2024-08-24 09:27:48

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

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
浅笑轻吟梦一曲 2024-08-24 09:27:48

适用于我:

$ 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 而不是零日期来完全避免整个情况。

Works for me :\

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

PHP 5.2.8 on mac OS, as well as PHP 5.2.5 on CentOS 5.2. Can you try the same test? If the result comes up different, what version of PHP are you using, and which platform?

FWIW, it strikes me that you could avoid this whole situation entirely by storing an actual NULL in the database instead of the zero-date.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文