【发布时间】:2010-05-29 09:13:34
【问题描述】:
假设现在我的日期时间显示如下:
2010-05-29 15:32:35
对应的时区可以通过date_default_timezone_get获取,
如何在与用户浏览器相同的时区输出结果,以免用户感到困惑?
【问题讨论】:
标签: php javascript timezone
假设现在我的日期时间显示如下:
2010-05-29 15:32:35
对应的时区可以通过date_default_timezone_get获取,
如何在与用户浏览器相同的时区输出结果,以免用户感到困惑?
【问题讨论】:
标签: php javascript timezone
没有可靠的方法从 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 了解策略),但您不能保证您是对的。
【讨论】:
您可以将 UTC 时间戳传递给页面并使用 JavaScript 进行转换。我曾经使用过这个技巧并且对结果很满意。有一个 constructor 的 JavaScript 日期采用 UTC 时间戳。对于从 PHP 生成 UTC 时间戳,可以使用gmmktime()。
【讨论】: