date_default_timezone问题

时间:2009-12-30 02:46:31

标签: php

我写了一个非常长的函数,它将计算美国时区相对于服务器时区的差异。我注意到通过使用default_timezone_set(),我可以得到我的函数计算的相同数据。我选择不使用default_timezone_set函数,因为我担心这会改变全局级别的时间,如果在我的应用程序中发生了其他地方的请求,则会使用错误的时间;也就是说,使用default_timezone_set函数计算当时的时间。

有人可以为我验证这个吗?我可以使用timezone_set函数而不必担心在其他函数中使用错误时间的可能性吗?希望这很清楚。

2 个答案:

答案 0 :(得分:1)

您应该看看PHP如何确定在没有date_default_timezone_set()的情况下使用的时区。它在date_default_timezone_get()函数下描述。

基本上,如果你没有使用date_default_timezone_set(),那么PHP最有可能使用服务器时区作为所有日期函数的默认时区,除非你碰巧设置了下面列出的其他设置之一date_default_timezone_get()

如果您使用date_default_timezone_set()专门设置时区,那么您将确保代码将使用的时区,而不是让服务器时区为您决定。

如果您想使用服务器时区,那么最好使用date_default_timezone_set()将时区设置为服务器时区,并删除所有歧义。

所以,对于简短的回答来说为时已晚,但简短的回答是肯定的,你应该能够安全地使用date_default_timezone_set()

答案 1 :(得分:0)

PHP已经有了计算时区之间偏移量的函数:

timezone_offset_get()

在PHP手册下,显示了示例用例。 timezone_offset_get()。以下是如何计算两个时区之间的时间偏移的示例。

$offset = get_timezone_offset('America/Los_Angeles','America/New_York'); //result is 10800 (3 hours)
$offset = get_timezone_offset('America/Los_Angeles'); //compares against default server timezone

在以秒为单位获得偏移后,您可以进行任何需要进行的计算。


关于设置默认时区,有两种方法可以实现。

  1. 调整php.ini以设置默认时区(在php.ini文件中添加以下行)

    date.timezone =“你的/时区”

  2. 在运行时调整默认时区(使用上述date_default_timezone_set("Your/Timezone")

  3. 取决于服务器设置。由于php.ini优先级,chaning php.ini可能不会生效。服务器中某处的其他php.ini优先于您正在编辑的那个