【发布时间】:2022-01-04 10:24:00
【问题描述】:
所以我使用 Zendesk API 来获取实例的计划,API 返回一个对象,其中包含一个名为间隔的数组,如下所示:
[
{ "start_time": 1980, "end_time": 2460 },
{ "start_time": 3420, "end_time": 3900 },
{ "start_time": 4860, "end_time": 5340 },
{ "start_time": 6300, "end_time": 6780 },
{ "start_time": 7740, "end_time": 8220 }
]
此示例仅转换为一周中每个工作日的上午 9 点到下午 5 点的分钟数,该值以从一周开始(实际上是周日的午夜)开始的分钟数为单位(这意味着 720 的值将是周日的中午) .
我正在尝试实现一些服务器端逻辑,循环遍历时间间隔并检查当前时间是否在给定日期的时间间隔之间,以便检测当前是否在营业时间内。
我在想 moment.js 库可能对此有用,我一直在玩 .startOf('week') 和 .diff() 函数,但我一直被阻止,我担心它可能不像我想的那么可靠考虑到我不确定一周的开始时间是星期一还是星期日。
目前为止
let isBusinessHours = false;
function checkBusinessHours() {
intervals.map((interval, key) => {
//offset weekdays to match interval keys
let currentDay = moment().weekday() -1;
//create comparison start & end times based on interval start & end times
let startTime = moment().startOf('week').add(interval.start_time, 'minutes');
let endTime = moment().startOf('week').add(interval.end_time, 'minutes');
//check to see if it's business hours
if (moment().isBetween(startTime, endTime) && currentDay === key) {
isBusinessHours = true;
}
})
return isBusinessHours;
}
但我不确定这是否是最好的检查方法?
【问题讨论】:
-
真正的问题是什么?您可以尝试moment.js documentation:“moment#startOf('week') 使用区域设置感知周开始日。”这似乎是一个坏主意,因为不同的文化在一周的第一天有不同的与地点或语言无关。还有
startOf('isoWeek'),至少提供了确定性(周一00:00:00)。
标签: javascript node.js datetime momentjs zendesk-api