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

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (1)
  • 关注 (0)
  • 查看 (193)

我正在尝试创建三个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());

我有一个开关来检查每个位置的time_zone。当我控制掉我的一个日期(OpeningHrs)时,结果总是偏移-04,即使变量zoneOffset指示不是吗?我假设默认是插入这样的:

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个“位置”,每个位置都有不同的时间和时区。最终我所追求的是创建一个地图,无论是在纽约,洛杉矶,还是介于两者之间的某个地方,如果他们在地图上查看标记,我希望它根据地点时间显示打开或关闭区等

提问于
用户回答回答于

时刻文件

  • 时刻(...)是本地模式。模糊输入(无偏移)假定为本地时间。明确的输入(带偏移)调整为当地时间。
  • moment.utc(...)是utc模式。模糊输入假定为UTC。明确的输入调整为UTC。
  • moment.parseZone()保持输入区域的传入。如果输入不明确,则它与本地模式相同。
  • moment.tz(...) with moment-timezone插件可以解析特定时区的输入。

// 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);

扫码关注云+社区

领取腾讯云代金券