-1

我正在研究根据用户位置转换时间的项目。即如果用户属于阿拉斯加,那么所有信息都将根据他的国家时区显示。我做了一些转换,但如果用户的夏令时时区(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));

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

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

谢谢

4

2 回答 2

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');
}
于 2013-05-31T11:21:10.873 回答
0

我有点不确定你具体要问什么,但希望这会有所帮助。

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

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

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

不要试图将时区视为数值。请参阅时区标签 wiki中的“TimeZone != Offset” 。

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

如果您只想使用 UTC,那么根本没有理由对时区做任何事情。浏览器始终可以将 UTC 与用户的本地时区相互转换,无论它是什么。只需使用 UTC 时间戳整数创建 JavaScriptDate对象,或从 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...
于 2013-05-31T15:10:02.423 回答