首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么strtotime()在不同的服务器上有不同的工作方式?

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

Stack Overflow用户
提问于 2011-10-05 19:24:21
回答 2查看 732关注 0票数 0
代码语言:javascript
复制
<?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。为什么?为什么在一些服务器上而不是在其他服务器上呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-10-05 19:33:39

阅读PHP Manual page for strtotime(),我们会得到以下信息:

如果成功,

将返回时间戳,否则返回FALSE。

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

那么为什么它会失败呢?这个问题的答案也在相同的手册页面上:

Errors/Exceptions

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

所以在我看来,您的一台服务器没有正确配置它的时区区域设置。

说了这么多,做了这么多,我建议如果可能的话,不要把strtotime()用在这类东西上。这是一个有点笨重的旧函数,而新的PHP datetime library提供了更好/更干净的功能。您可以使用它创建一个datetime对象,如下所示:

代码语言:javascript
复制
$date = new DateTime('0000-00-00 00:00:00');

希望这能有所帮助。

票数 0
EN

Stack Overflow用户

发布于 2011-10-05 19:28:06

试一试

代码语言:javascript
复制
setlocale(LC_ALL, "C");

在任何strtotime调用之前

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7660519

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档