PHP 日期问题 - strtotime 没有输出它应该输出的内容?
我的数据库中有几个空白的 DATETIME 值(0000-00-00 00:00:00)。
每当我通过 strtotime 运行它们时,它们都会返回“1263247058”而不是 FALSE,它应该根据链接页面上的信息执行此操作:
为什么呢?
谢谢。
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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
作为
strtotime
文档中的评论之一 表示“strtotime("0000-00-00")
返回的值因 PHP 版本而异”。因此,最好对该特定值进行额外检查。As one of the comments in the docs for
strtotime
says, "the value returned bystrtotime("0000-00-00")
varies by PHP version". So, it's better to do an additional check for that specific value.许多 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
怎么来的,其他答案已经解释了。此代码将强制该值为 false:
How come is explained in the other answers. This code will force the value to false:
考虑以下代码的输出(PHP 版本 5.3.0):
Consider the output of the following code (PHP Version 5.3.0):
适用于我:
Mac OS 上的 PHP 5.2.8,以及 CentOS 5.2 上的 PHP 5.2.5。你能尝试同样的测试吗?如果结果不同,您使用的是哪个版本的 PHP,哪个平台?
FWIW,令我震惊的是,您可以通过在数据库中存储实际的 NULL 而不是零日期来完全避免整个情况。
Works for me :\
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.