将GMT时间转换为夏令时国家时区


Convert GMT time to Day light saving countries Timezone

我正在根据用户位置转换时间的项目上工作。例如,如果用户属于阿拉斯加,那么所有信息将根据他所在国家的时区显示。我做了一些转换,但我得到错误的时间,在情况下,用户有一个日光时区(DST)的变化频繁。

这是我的代码片段。

date_default_timezone_set('UTC');
$offset=$_SESSION['gmtoffset'];
echo date('Y-m-d H:i:s',strtotime(date('Y-m-d H:i:s'))-(-$offset));

那么在这种情况下,我如何维护这个时区呢?与时间相关的转换的确切方式是什么?

任何指导和想法将不胜感激。

谢谢

这里有一个简单的解决方案

Javascript:

var timeZone = new Date().getTimezoneOffset();
document.cookie="tz=" + (timeZone/(-60));

然后PHP:

if(!empty($_COOKIE['tz']) && $_COOKIE['tz']>=-12 && $_COOKIE['tz']<=13){
    $offset = $_COOKIE['tz'];
    $tz = timezone_name_from_abbr(null, $offset * 3600, true);
    if($tz === false) $tz = timezone_name_from_abbr(null, $offset * 3600, false);
    date_default_timezone_set($tz);
}else{
    date_default_timezone_set('UTC');
}

我有点不确定你特别问什么,但希望这将有助于。

如果您的问题是关于检测用户在阿拉斯加时区,那么阅读:

  • 如何检测用户的时区?

如果你的问题是关于按国家选择时区,那么阅读:

    在PHP中,我如何从偏移量和国家获得时区?

如果你想了解阿拉斯加时区,认识到有三个不同的法定时区,和七个不同的IANA/Olson/TZ时区(PHP可以使用):

  • http://en.wikipedia.org/wiki/Time_in_Alaska

不要尝试将时区视为数字值。参见时区标签wiki中的"TimeZone != Offset"。

如果您想在PHP中使用时区操作日期,请参阅PHP文档中的date_default_timezone_set示例。

如果你只想使用UTC,那么根本没有理由对时区做任何事情。浏览器总是可以将UTC与用户的本地时区进行转换,不管是什么。只需用UTC时间戳整数创建JavaScript Date对象,或者从UTC格式解析,例如YYYY-MM-DDTHH:MM:SSZ

为了消除浏览器的不一致性,您可能需要使用库来代替,例如moment.js:

// here's one way
var m = moment('2013-05-31T12:34:56Z');
// here's another
var m = moment.utc('2013-05-31 12:34:56','YYYY-MM-DD HH:mm:ss');
// pretty much anything else you might want to do...