【问题标题】:How to set time zones for different locations?如何设置不同地点的时区?
【发布时间】:2013-04-01 09:14:02
【问题描述】:

我对设置时区感到非常困惑。 我正在用 PHP 开发一个论坛,因为我不确定是否显示回复时间。

下面是条件,

2013 年 4 月 1 日上午 10 点(时区“亚洲/加尔各答”)发布了一个问题。有人在 2013 年 3 月 31 日晚上 11:30 快速回复,因为回复人的时区是“美国/芝加哥”,即 -10.30 小时。

我的问题是如何管理不同位置的时区?

在上面的例子中,发布问题并得到回复的用户应该显示什么时间?

向回答问题的用户显示的时间应该是多少?

我正在使用 PHP 的时间函数作为字符串在数据库中插入时间记录。 并显示我使用的时间

date("d m Y h:m a", strtotime($time));

上面的代码$time是来自数据库的值。

谢谢..

【问题讨论】:

  • 使用 date_default_timezone_set('America/Los_Angeles');
  • 您可以在服务器上使用一个统一的时区(例如UTC),在客户端使用Date.getTimezoneOffset()来确定客户端的偏移量,并根据该偏移量输出相关时间。
  • 你从哪里得到$time?如果来自用户,则不要。

标签: php timezone


【解决方案1】:

我会使用 gmdate() 将日期和时间存储到数据库中,以使它们基于 GMT:

$d = gmdate('Y-m-d H:i:s');
// store $d into database

在呈现页面时,您会考虑用户的时区偏好:

date_default_timezone_set('Asia/Singapore');
$ts = strtotime($date_from_db . ' GMT');
$date_on_page = date('Y-m-d H:i:s', $ts);

或者你可以让 JavaScript 处理时间转换。

更新

您还可以在数据库中存储 UNIX 时间戳;就我个人而言,我喜欢 DATETIME 列,因为当您尝试调试某些东西时,它们更容易解码:)

【讨论】:

  • 谢谢,这很有用。但是对于不同的用户位置,我怎样才能设置时区?
  • @Sachin 您将发送 GMT 时间并让 JavaScript 处理时区;如果您的用户可以在数据库中设置他们的时区,您当然也可以使用 PHP 来处理:)
  • 好的,但是使用 javascript 我必须将时区存储在 php 会话变量中。而对于大型应用程序,对于很多用户来说,我认为使用会话是不可行的。
  • @Sachin 如果您使用 JavaScript 处理时间,则不需要存储时区,因为它会自动格式化为用户的本地时区。顺便说一句,会话是相当可行的,即使对许多用户来说也是如此。
  • 所以,每次在我想要日期时间的页面上,我都必须调用 javascript 函数,对吗?
【解决方案2】:
date_default_timezone_set('America/New_York'); 

此函数用于在 php 中使用默认时区。

这是tutorial的链接。

并更改时区使用:

$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";

$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";

这是timezones的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-19
    • 1970-01-01
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    相关资源
    最近更新 更多