【问题标题】:How to deal with timezone如何处理时区
【发布时间】:2014-05-07 07:07:52
【问题描述】:

我知道这个问题已经被问过了。但我无法清楚地想到如何处理这个问题。我已经阅读了一些关于如何处理它的文章。我的问题是我有一个处理会议/日程安排的网站,但该网站的用户可能来自其他国家,这是我的大问题,因为他们有不同的时区。

情况是这样的。

我明天创建了一个会议,并将时间设置为下午 3:00(考虑到我在新加坡)。我的客户将在法国,所以他在网站上看到的时间应该是上午 9:00。

我怎么能想到这个?

感谢你们的帮助。

【问题讨论】:

标签: php datetime time timezone


【解决方案1】:

这就是我的做法。

  1. 您在 php 脚本中设置的默认时区,由您决定。

  2. 然后,为了显示您的用户,您可以确定用户的时区。您使用 javascript 执行此操作,因为您需要来自客户端的信息。一些可能的解决方案:

纯javascript https://stackoverflow.com/a/1091399/525445

jQuery https://stackoverflow.com/a/5607444/525445

(或者甚至 - 结合这两种方法 - 使用纯 JavaScript 获取时区,然后将该值存储在会话变量中,就像在 jquery 示例中一样)。

3。 现在您的 php 脚本知道您的用户的时区,您可以使用它来将您的默认时区转换为他们拥有的任何时间,使用以下命令:

https://stackoverflow.com/a/2505687/525445

【讨论】:

  • 我在 PHPbb 和其他 bb 脚本中看到过类似的方法。您在注册时选择时区。我的猜测是,在每个请求开始时都会调用登录 ini_set() 来为特定用户设置时区。
【解决方案2】:

PHP 包含一个DateTime object,可用于跨时区转换。

我建议将数据库中的所有时间戳存储在同一个时区中(或者如果这不可能,则将时区与时间戳一起保存)。当需要显示时间戳时,从数据库中拉取,然后转换为用户的本地时区。

$date = new DateTime('2000-01-01', new DateTimeZone('UTC'));
echo $date->format('Y-m-d H:i:s'); // save this one to your database
// Output: 2000-01-01 00:00:00


$date->setTimezone(new DateTimeZone('Australia/Adelaide'));
echo $date->format('Y-m-d H:i:s'); // Serve this one to the user
// Output: 2000-01-01 09:30:00

这里是 PHP 支持的full list of timezones

【讨论】:

【解决方案3】:

试试这个:

date_default_timezone_set("Asia/kolkata");
$date= date("Y-m-d H:i:s");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 2020-06-06
    • 1970-01-01
    • 1970-01-01
    • 2011-11-26
    相关资源
    最近更新 更多