将GMT时间转换为日间节能国家时区

时间:2013-05-31 11:05:06

标签: php timezone timezone-offset

我正在研究根据用户位置转换时间的项目。即如果用户属于ALASKA然后所有信息将根据他的国家时区显示。我做了一些转换,但是如果用户的日光时区(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));

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

任何指导和想法都将受到赞赏。

由于

2 个答案:

答案 0 :(得分:0)

这是一个简单的解决方案

使用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');
}

答案 1 :(得分:0)

我对你所询问的内容有点不确定,但希望这会有所帮助。

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

如果您的问题是按国家/地区选择时区,请阅读:

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

请勿尝试将时区视为数值。请参阅timezone tag wiki中的“TimeZone!= Offset”。

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

如果您只想使用UTC,那么就没有理由对时区做任何事情。浏览器始终可以将UTC转换为用户的本地时区,也可以转换为用户的本地时区。只需使用UTC时间戳整数创建JavaScript YYYY-MM-DDTHH:MM:SSZ对象,或者从UTC格式解析,例如// 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...

要消除浏览器不一致,您可能需要使用库,例如​​PHP documentation

{{1}}