我正在根据用户位置转换时间的项目上工作。例如,如果用户属于阿拉斯加,那么所有信息将根据他所在国家的时区显示。我做了一些转换,但我得到错误的时间,在情况下,用户有一个日光时区(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...