客户端时区是否与为用户指定的时区相同(javascript / moment.js / moment-timezone.js)

时间:2014-10-28 19:56:51

标签: javascript momentjs timezone-offset

我希望能够获得运行客户端浏览器的时区,因此我可以将其与用户的家庭时区进行比较,我通过“America / Vancouver”这样的配置选项知道。我正在使用moment.js和moment-timezone.js,我无法弄清楚如何做到这一点!

更新:我真的不需要客户端的时区来获得我想要的功能 - 我只需要知道它是否与我在配置选项中指定的用户不同。我已经找到了解决这个问题的方法,它不需要在下面加载一个全新的库。

(更新问题以使其更清晰。)

3 个答案:

答案 0 :(得分:0)

你不需要片刻,这是一个原生的javascript函数:

var offset = new Date().getTimezoneOffset();

然后,您只需将客户端的偏移量(“客户端时区”)与服务器的偏移量(“用户时区”,假设以某种方式存储在数据库或配置文件中)进行比较,并在演示文稿中调整日期时间值时应用差异图层(例如;您还可以将其与将日期显示本地化为客户端/用户的文化结合起来。)

示例:

如果您的客户端TZ偏移为-480(-8 GMT,AKA“PST”)且您的服务器TZ偏移为-8,则当从服务器显示调整的时区相关数据时,它们会相互抵消。请注意,通过“服务器时区”,这也可以引用应用程序中已知用户的时区,然后只比较该区域的时刻偏移量与客户端TZ偏移量。

使用原生JS小提琴: http://jsfiddle.net/34qfwf1y/1/

<强>代码:

// client TZ (offset from GMT)
var clientTZOffset = new Date().getTimezoneOffset() * -1;

// user home TZ from server (faked here; pretend you got it from server and passed it to js)
// pretend user's home is in Los Angeles (using Pacific Daylight Time since it is 28 October 2014 today)
var User = {
    Profile: {
        TimeZoneOffset: -420
    }
}; // server is GMT -7

var origDate = new Date();
var diff = User.Profile.TimeZoneOffset - clientTZOffset;
var clientTZHoursFromGMT = clientTZOffset / 60;
var homeTZHoursFromGMT = User.Profile.TimeZoneOffset / 60;
var adjDate = new Date(origDate.getTime() + diff*60000);

document.getElementById('isHomeTZ').innerHTML = (clientTZHoursFromGMT===homeTZHoursFromGMT).toString().toUpperCase();
document.getElementById('originalDate').innerHTML = origDate.toString();
document.getElementById('adjustedDate').innerHTML = adjDate.toString();
document.getElementById('homeTZ').innerHTML = homeTZHoursFromGMT.toString();
document.getElementById('clientTZ').innerHTML = clientTZHoursFromGMT.toString();
Client is in user's home time zone (PDT):
<div id="isHomeTZ"></div>
<br/>Original date (ignore TZ display, pretend it is PDT / Los Angeles):
<div id="originalDate"></div>
<br/>Saved User's Home TZ (simulated; in hours from GMT)
<div id="homeTZ"></div>
<br/>Client TZ (in hours from GMT)
<div id="clientTZ"></div>
<br/>Adjusted date (in client timezone)
<div id="adjustedDate"></div>

答案 1 :(得分:0)

我不确定&#34;客户端的浏览器&#34;之间的区别是什么?和&#34;用户的时区&#34;?

您可以使用以下方式在几分钟内从GMT获取当前用户的时区偏移:

moment().zone();

moment.js docs Timezone Offset

答案 2 :(得分:0)

我醒来的答案有效:

function awayFromHomeTZ(tz) {
    var there = moment.tz(tz);
    var here = moment();
    var thereHHMM = there.hour() * 60 + there.minute();
    var hereHHMM = here.hour() * 60 + here.minute();
    return Math.abs(thereHHMM - hereHHMM) > 59;
}

小提琴:http://jsfiddle.net/0418th02/4/