"It is not safe to rely on the system's timezone settings"背后的理由是什么?



在python中我可以做

import datetime
print datetime.datetime.now().strftime('%Y-%m-%d')
# prints `2014-06-27`. 
同样,在node.js中:
console.log(new Date().toDateString());
// Fri Jun 27 2014

当我在php中尝试相同的操作时:

<?php
print date('Y-m-d');
?>

我得到这个

警告:date():依赖系统的时区设置是不安全的。要求使用日期。时区设置或date_default_timezone_set()函数。如果您使用了这些方法中的任何一种,但仍然收到此警告,那么您很可能拼错了时区标识符。我们现在选择了UTC时区,但请设置日期。Timezone选择您的时区。在…

这条消息背后的基本原理是什么?为什么不使用python或node呢?使用系统时区究竟有哪些"不安全"之处?

因为有很多关于这个错误的帖子,请仔细阅读:我不是如何修复它(非常明显),我想知道为什么我首先得到这个消息。

PHP传统上用于web开发,因此一个合理的原因是web服务的消费者不会与服务器托管所在的时区处于同一时区,并且可能配置为(就系统时间而言)。

在系统用户看到客户端正确时间的上下文中,该警告是有意义的。

这里有一些讨论,其中提到了我上面给出的理由。来自同一页面的另一个理由,来自一个可能是PHP语言开发人员的人。

不-你,作为一个管理员,需要做出一个明智的决定你想要的时区。虫子太多了报告中人们毫无头绪,所以现在我们发出警告。

读完这个线程后

http://grokbase.com/t/php/php-internals/135qbh5twa/date-timezone-e-warning-really-necessary-whats-the-rationale

我明白这个警告没有有效的技术原因。唯一的原因是php组的某个人认为减少bugs.php.net上的bug报告数量可能会很有用。所以基本上是magic_quotes之类的

最新更新