首页 > 解决方案 > 使用 moment.js 检查本地时间是否在其他 2 个时区时间之间

问题描述

有人问过类似的问题,但无论出于何种原因,我都无法解决这个问题。我希望世界上任何地方的用户都能看到我的网站上的商店是开门还是关门。商店的营业时间是上午 8 点至晚上 8 点 MF,以及上午 8 点至晚上 7 点周六至周日。

所以基本上代码需要获取用户本地时间并将其与 CT 中的当前时间进行比较,然后查看商店是否营业。由于如果它在周二晚上 7 点 CT 发生,则可能是远东时区的周三早上,所以现在您也需要比较这些日子。

我所做的所有搜索都发现了一些类似问题/答案的点点滴滴,但我就是不知道如何将它们放在一起以提出解决方案。我开始尝试这个:

var currTimeTokyo = moment.tz(moment(), 'Asia/Tokyo').format();
var currTimeCT = moment.tz(moment(), 'America/Chicago').format();
console.log(currTimeTokyo);
console.log(currTimeCT);

这给出了:

2021-10-30T00:51:42+09:00
2021-10-29T10:51:42-05:00

这些是正确的,但现在我如何与今天的开放/关闭时间进行比较?我需要检查东京时间是否在 CT 的打开和关闭之间,但打开/关闭时间取决于它是哪一天,而且东京可能与 CT 不同的一天。你将如何解释所有这些?

更新:我发现了一些有用的东西并作为答案发布。

标签: javascripttimecomparemomentjsluxon

解决方案


我按照 Corrl 的建议调查了 Luxon,我想出了这个,我认为这解决了我的问题。

// open hours are M-F 8am-8pm, Sat-Sun 8am-7pm (all times CT)
var hours = [ 
    { day: 'Sunday', open:8, close:19 },
    { day: 'Monday', open:8, close:20 },
    { day: 'Tuesday', open:8, close:20 }, 
    { day: 'Wednesday', open:8, close:20 },
    { day: 'Thursday', open:8, close:20 },
    { day: 'Friday', open:8, close:20 },
    { day: 'Saturday', open:8, close:19 }
];

var isOpen = false;
var local = luxon.DateTime.local(); // get current time in local tz
var localInCT = local.setZone("America/Chicago"); // rezone to CT without changing timestamp;

hours.forEach(function(item, index){
    if (index === localInCT.weekday && localInCT.hour >= item.open && localInCT.hour < item.close) {
        isOpen = true;
    }
});
console.log(isOpen);

推荐阅读