为什么 strtotime() 在不同服务器上的工作方式不同?
<?php
header('Content-Type: text/plain');
$time = '0000-00-00 00:00:00';
echo $time . PHP_EOL . PHP_EOL;
$time = strtotime($time);
echo $time . PHP_EOL . PHP_EOL;
在我们的开发服务器上,第二个 $time
不输出任何内容。使用 var_dump()
进行的测试显示其值为 false
。这很好。在实时服务器上,我得到 943920000
。使用 var_dump()
进行的测试表明这是一个整数。
为什么?
显然 日期 0 出现为 30 是相当常见的1999 年 11 月。为什么?为什么在某些服务器上而不是在其他服务器上?
<?php
header('Content-Type: text/plain');
$time = '0000-00-00 00:00:00';
echo $time . PHP_EOL . PHP_EOL;
$time = strtotime($time);
echo $time . PHP_EOL . PHP_EOL;
On our development server, the second $time
outputs nothing. A test with var_dump()
reveals its value to be false
. Which is fine. On a live server, I get 943920000
. A test with var_dump()
shows that this is an integer.
Why?
Apparently it is fairly common for dates of zero to come up as 30 November 1999. Why? And why on some servers and not on others?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
尝试
在任何 strtotime 调用之前
try
before any strtotime call
阅读
strtotime()
的 PHP 手册页,我们得到以下结果:因此,在您的一台服务器上,对
strtotime()
的调用失败。那么为什么会失败呢?答案也在同一手册页上:
所以在我看来,您的一台服务器没有正确配置其时区区域设置。
综上所述,如果可能的话,我建议不要使用
strtotime()
来做这样的事情。这是一个有点笨重的旧函数,而较新的 PHP 日期时间库 提供更好/更干净的功能。您可以使用它创建一个日期时间对象,如下所示:希望有帮助。
Reading the PHP Manual page for
strtotime()
, we get the following:Therefore it follows that on one of your servers, the call to
strtotime()
is failing.So why would it fail? The answer to that is also on the same manual page:
So it seems to me that your one server doesn't have it's timezone locale configured correctly.
All that said and done, I would suggest not using
strtotime()
for stuff like this, if possible. It is a bit of a clunky old function, and the newer PHP datetime library provides much better/cleaner functionality. You can create a datetime object using it as follows:hope that helps.