在用户的时区显示当前时间,不要忘记夏令时

时间:2011-12-09 10:19:15

标签: php javascript time timezone dst

我知道有很多类似的问题,但我没有找到我真正需要的东西......

所以我使用PHP,我想在访问者当前时区显示数据库的时间戳。

到目前为止,我已完成以下工作:

  1. 在PHP中,我到处使用$ TIME,即:

    $TIME = time() - date("Z");

    这应该是对时间的绝对参考,没有dst ,我是对的吗?

  2. 我用javascript获取用户的时区偏移量(仅在第一次访问时),并将其存储在几分钟内:

    var d = new Date(); var tz = -d.getTimezoneOffset();

    当然,用户可以将他/她的时区设置为另一个。

  3. 从数据库显示日期时,我将存储的时间量添加到时间戳: $timestamp += $TIMEZONE_OFFSET * 60;

    我用date()

  4. 格式化它

    这似乎运作良好,但我想知道如果它来到dst。

    我想到以某种方式自动更改用户的时区偏移,当涉及到dst时,但是所有日期都将被更改(那些也不在dst期间)。并非每个地区都使用dst,所以我真的很困惑如何解决这个问题:\

2 个答案:

答案 0 :(得分:0)

首先,time()date()依赖于INI设置date.timezone以及DST。绝对时间你应该使用gmmktime()gmdate()代替。

有关时区夏令时的信息可以通过DateTimeZone::getTransitions()解决。

或者您可以使用某些第三方服务。

答案 1 :(得分:0)

我会以Unix date()格式发送所有时间戳,这是基于UTC的, 独立于时区,DST等。在PHP方面:

$php_timestamp = gettimeofday(true);

在JavaScript方面:

var js_timestamp = new Date(php_timestamp*1000);

然后所有get{FullYear,Month,Date,Hours,...}()to[Locale]{Date,Time,}String()方法会自动生成结果 基于用户(客户端)时区。