我正在研究根据用户位置转换时间的项目。即如果用户属于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));
所以在这种情况下我该如何维护这个时区?这次与时间相关的转换的确切方式是什么?
任何指导和想法都将受到赞赏。
由于
答案 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_set
中Date
的示例。
如果您只想使用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}}