为什么strtotime()在不同的服务器上工作方式不同?

时间:2011-10-05 11:24:21

标签: php date timestamp

<?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()的测试显示这是一个整数。

为什么?

显然是it is fairly common for dates of zero to come up as 30 November 1999。为什么?为什么在某些服务器上而不在其他服务器上?

2 个答案:

答案 0 :(得分:1)

setlocale(LC_ALL, "C");

在任何strtotime电话之前

答案 1 :(得分:0)

阅读PHP Manual page for strtotime(),我们得到以下内容:

  

成功时返回时间戳,否则返回FALSE。

因此,在您的某个服务器上,对strtotime()的调用失败。

那为什么会失败?答案也在同一个手册页上:

  

<强>错误/异常

     

如果时区无效,则每次调用日期/时间函数都会生成E_NOTICE,如果使用系统设置或TZ环境变量,则会生成E_STRICT或E_WARNING消息。另请参见date_default_timezone_set()

所以在我看来,你的一台服务器没有正确配置它的时区语言环境。

如果可能的话,我建议不要使用strtotime()这样的东西。这是一个笨重的旧函数,而较新的PHP datetime library提供了更好/更清晰的功能。您可以使用它创建日期时间对象,如下所示:

$date = new DateTime('0000-00-00 00:00:00');
希望有所帮助。