我正在尝试创建三个moment.js对象,一个用于当前用户的系统时间,两个用于同一天的地点开放和关闭时间。
首先,我创建了一个date对象,如下所示:
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个“地点”,每个地点都有不同的时间和时区。最终,我要做的是创建一个地图,这样无论用户是在纽约、洛杉矶,还是两者之间的某个地方,如果他们查看地图上的标记,我都希望它根据位置、时区等显示为开放或关闭。
发布于 2019-03-23 01:07:11
以下是一些事情:
EST
,CST
,MST
,PST
),那么你已经有了一个问题,因为你没有考虑到包含这些缩写的地区的夏令时,你也没有考虑到亚利桑那州(大部分地区是没有夏令时的MST ),而且你已经忘记了阿拉斯加和夏威夷,以及美国的任何地区。您应该更仔细地检查您的数据。- `America/New_York` - Eastern Time (EST / EDT)
- `America/Chicago` - Central Time (CST / CDT)
- `America/Denver` - Mountain Time (MST / MDT)
- `America/Phoenix` - Mountain Time (MST only)
- `America/Los_Angeles` - Pacific Time (PST / PDT)
- `America/Anchorage` - Alaskan Time (AKST / AKDT)
- `America/Adak` - Hawaii-Aleutian Time (HAST / HADT)
- `Pacific/Honolulu` - Hawaii-Aleutian Time (HAST only)
(这份名单不包括关岛、波多黎各、美属萨摩亚等美国领土,但它们在更大的名单here上。)
CST
--这可能意味着美国中央标准时间、澳大利亚中央标准时间、古巴标准时间或中国标准时间。(还有其他几个存在冲突。)moment.tz('08:00:00','HH:mm:ss',‘美国/芝加哥’).format() //=>在您的代码中,您假设本地时区的“今天”与目标时区中的“今天”相同。事实可能并非如此。假设你从世界的另一端运行代码。当在美国还是2019-03-22
的时候,他们可能已经在使用2019-03-23
了。如果您使用的是我在前面的要点中展示的代码,那么将为您处理automatically.
https://stackoverflow.com/questions/55288256
复制相似问题