gpt4 book ai didi

javascript - getTimezoneOffset() 方法在本地主机和服务器上返回不同的时间

转载 作者:行者123 更新时间:2023-11-30 17:30:44 30 4
gpt4 key购买 nike

我有一个函数,可以根据澳大利亚新南威尔士州时区减去本地偏移来计算当前用户位置时间。因此,例如,我想比较澳大利亚 (NSW) 本地时间和我本地时间的事件开始时间,如果我在我的本地主机上打开网站,我会得到正确的值。但是,如果我访问上传服务器(测试环境)上的网站,我会得到 1 小时的不同。因此,如果本地主机上的正确时间是 04:00,我将在测试环境中得到 05:00。

这是我的功能:

var date = {

formatFullDate: function(date, gmtTimeOffset) {
var localDate = this.getLocalTimeFromAustraliaTime(date, gmtTimeOffset),
month = this.addZeroToFront(localDate.getMonth() + 1),
hour = this.addZeroToFront(localDate.getHours()),
minute = this.addZeroToFront(localDate.getMinutes());

return localDate.getDate() + '/' + month + '/' + localDate.getFullYear() + ' ' + hour + ':' + minute;
},

formatTime: function(date, gmtTimeOffset) {
var localDate = this.getLocalTimeFromAustraliaTime(date, gmtTimeOffset),
hour = this.addZeroToFront(localDate.getHours()),
minute = this.addZeroToFront(localDate.getMinutes());

return hour + ':' + minute;
},

addZeroToFront: function(whatever) {
if (whatever < 10) whatever = "0" + whatever;
return whatever;
},

getUTCtimeOffset: function() {
var date = new Date();
return date.getTimezoneOffset();
},

getLocalTimeFromAustraliaTime: function (date, gmtTimeOffset) {
var gmtTime = new Date(date.getTime() - gmtTimeOffset*1000),
localOffset = new Date().getTimezoneOffset(),
localDate = new Date(gmtTime - localOffset*60*1000);
return localDate;
}
}

我的具体案例的一些一般细节:

澳大利亚/NSQ 时区:UTC/GMT +10 小时
芬兰时区:UTC/GMT +3 小时

因此 AUS/NSW 和芬兰之间有 7 个小时的差异,结果在本地主机上正确显示,但在测试环境中没有正确显示。我不确定为什么这两种情况之间有 1 小时的差异。

编辑:1

这是我显示当前本地时间的方式

var tr = $('<tr style="cursor:pointer; color: #000000" id="' + categoryId + '_' + raceNumber + '_nextRaceTr"/>')
.append($('<td/>')
.append($('<p/>')
.html(date.formatTime(new Date(value.time), value.timezoneOffset))))

time 和 timezoneOffset 是 JSON 响应。

P.S - 如果我缺少括号或任何其他语法错误,请不要注意。我只复制了一小段代码来展示我如何在 HTML 上显示时间。

最佳答案

JavaScript Date 对象总是受其运行环境的时区设置影响。在大多数情况下,这是用户的浏览器。不同时区的用户运行您的代码会得到不同的结果。

一般来说,您应该提防任何遵循如下模式的代码:

var adjustedDate = new Date(someOtherDate.getTime() - someOffset);

您可能认为您巧妙地将 Date 对象的行为调整到不同的时区,但实际上您是在更改引用时间点并保持时区不变!

此外,请考虑您的位置:

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

您可能认为您获取的是用户的时区偏移量,但实际上您只是获取了用户的当前 时区偏移量。请记住,new Date() 会及时初始化为当前 时刻。您正在使用的那一刻可能具有完全不同的偏移量,具体取决于用户是否恰好位于 daylight saving time 的时区。是否生效,当时是否生效。

就您的代码而言,由于您没有提供输入示例,因此很难说出您在追求什么。你可能想看看 moment.js ,其中包含您可能需要的大部分格式化功能。

顺便说一句 - 我在您的代码中没有看到任何实际将其绑定(bind)到任何 Australian time zones 的内容.

关于javascript - getTimezoneOffset() 方法在本地主机和服务器上返回不同的时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23112301/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com