gpt4 book ai didi

javascript - 为什么无法识别在 moment.js 中使用字符串参数指定的时区?

转载 作者:行者123 更新时间:2023-11-30 09:15:37 27 4
gpt4 key购买 nike

我正在尝试创建三个 moment.js 对象,一个用于当前用户的系统时间,两个用于同一天的营业时间和营业时间。

首先我创建了一个日期对象如下:

var today = moment();

然后我遍历一个对象数组:

        $(locations).each(function(){ 

switch(this.time_zone) {
case 'EST':
zoneOffset = '-04:00';
break;
case 'CST':
zoneOffset = '-05:00';
break;
case 'MST':
zoneOffset = '-06:00';
break;
case 'PST':
zoneOffset = '-07:00';
break;
default:
zoneOffset = '-04:00';
}

var timeOpen = today.format("YYYY")+'-'+today.format("MM")+'-'+today.format("DD")+'T'+this.hours['d'+today.day()+'s']+zoneOffset;
var timeClose = today.format("YYYY")+'-'+today.format("MM")+'-'+today.format("DD")+'T'+this.hours['d'+today.day()+'e']+zoneOffset;
openingHrs = moment(timeOpen);
closingHrs = moment(timeClose);
console.log(this.id+' '+zoneOffset+' - '+openingHrs.format());

我有一个开关来检查每个位置的时区。当我用控制台输出我的一个日期 (openingHrs) 时,即使变量 zoneOffset 另有指示,结果始终是 -04 的偏移量?我假设默认值是这样插入的:

48 -06:00 - 2019-03-21T10:00:00-04:00
49 -05:00 - 2019-03-21T08:30:00-04:00
50 -07:00 - 2019-03-21T11:00:00-04:00
51 -05:00 - 2019-03-21T09:00:00-04:00
52 -05:00 - 2019-03-21T09:00:00-04:00

这是我在 JSON 中使用的内容:

"time_zone":"CST",
"hours":{
"d1s":"08:00:00",
"d1e":"17:00:00",
"d2s":"08:00:00",
"d2e":"17:00:00",
"d3s":"08:00:00",
"d3e":"17:00:00",
"d4s":"08:00:00",
"d4e":"17:00:00",
"d5s":"08:00:00",
"d5e":"17:00:00",
"d6s":"00:00:00",
"d6e":"00:00:00",
"d7s":"00:00:00",
"d7e":"00:00:00"
}

我有 200 多个“地点”,每个地点都有不同的时间和时区。最终我要做的是创建一张 map ,这样无论一个人是在纽约、洛杉矶还是介于两者之间的某个地方,如果他们看 map 上的标记,我希望它根据该位置时间显示开放或关闭区域等

最佳答案

来自 moment documentation :

  • moment(...) is local mode. Ambiguous input (without offset) is assumed to be local time. Unambiguous input (with offset) is adjusted to local time.
  • moment.utc(...) is utc mode. Ambiguous input is assumed to be UTC. Unambiguous input is adjusted to UTC.
  • moment.parseZone() keep the input zone passed in. If the input is ambiguous, it is the same as local mode.
  • moment.tz(...) with the moment-timezone plugin can parse input in a specific time zone.

// when you moment(anything) it is converted to local mode... -03:00 here in São Paulo/BR
console.log(moment('2019-03-21T18:13:38-05:00').format());
console.log(moment().format());
console.log(moment(new Date()).format());

// it you want to keep timezone from input then you should use moment.parseZone()
console.log(moment.parseZone('2019-03-21T18:13:38-05:00').format());
console.log(moment.parseZone(moment().tz('America/Sao_Paulo')).format());
console.log(moment.parseZone('2019-03-21T18:13:38-11:00').format());
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.23/moment-timezone.min.js"></script>
<script src="https://momentjs.com/downloads/moment-timezone-with-data.js"></script>

将其应用于您的问题,您应该:

openingHrs = moment.parseZone(timeOpen);
closingHrs = moment.parzeZone(timeClose);

关于javascript - 为什么无法识别在 moment.js 中使用字符串参数指定的时区?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55288256/

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