【问题标题】:How do I show datetime in the same time zone as user using PHP or javascript?如何在与使用 PHP 或 javascript 的用户相同的时区显示日期时间?
【发布时间】:2010-05-29 09:13:34
【问题描述】:

假设现在我的日期时间显示如下:

2010-05-29 15:32:35

对应的时区可以通过date_default_timezone_get获取,

如何在与用户浏览器相同的时区输出结果,以免用户感到困惑?

【问题讨论】:

    标签: php javascript timezone


    【解决方案1】:

    没有可靠的方法从 PHP 或 JavaScript 读取用户的区域时区设置。

    在 JavaScript 中,您可以读取 UTC 和用户当前时区中的时间之间的偏移量,但这不会给您提供时区名称,因此您要么关闭时区标识符(使时间完全不明确)或者包括它是像UTC+01:00 这样的显式偏移量,这很丑陋,并且仍然无法处理在不同 DST 期间更改时区。

    正如 bobah 所说,您可以在 JavaScript Date 上使用 toLocaleString() 以在客户端的真实桌面时区中输出它。但是,这样您就无法控制日期格式。例如在我的机器上 Chrome 输出笨拙:

    Sat May 29 2010 15:03:46 GMT+0200 (W. Europe Daylight Time)
    

    而 Opera 只是咳嗽:

    29/05/2010 15:03:46
    

    因为它根本没有说明时区,所以毫无用处的模棱两可。 IE 也同样简洁,Safari 也没有声明时区。 Firefox 在 Linux 上对我有用,但在 Windows 上不行。啊。

    因此,如果您需要可靠性,处理时区的唯一方法是让用户在其站点设置中手动选择一个,然后在为他们生成页面时从 UTC 转换为该时区。您可以在 JavaScript 中猜测最有可能出现在哪些常见时区中(请参阅this question 了解策略),但您不能保证您是对的。

    【讨论】:

      【解决方案2】:

      您可以将 UTC 时间戳传递给页面并使用 JavaScript 进行转换。我曾经使用过这个技巧并且对结果很满意。有一个 constructor 的 JavaScript 日期采用 UTC 时间戳。对于从 PHP 生成 UTC 时间戳,可以使用gmmktime()

      【讨论】:

      • @user198729 - 不是在 HTML 页面中生成 '2010-05-01 14:37:00' 而是生成类似 (new Date('1272717420000')).toLocaleString()
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-22
      • 2011-07-13
      • 1970-01-01
      • 2018-01-14
      • 2013-06-29
      相关资源
      最近更新 更多