momentjs - 使用moment.js检查时间是否在两次之间,而不是在某个时区的周末
问题描述
如果世界上任何地方的当前时间在上午 8:30 到下午 5:30 之间并且不是山区标准时间的周末,我正在尝试执行一些代码。我正在加载moment-with-locales.min.js
和moment-timezone-with-data.min.js
。我的代码如下所示:
var format = 'hh:mm',
date = new Date()
mstWeekday = moment(date, 'd', 'MST')
time = moment(date, format),
beforeTime = moment('08:30', format, 'MST'),
afterTime = moment('17:30', format, 'MST');
if ( (time.isBetween(beforeTime, afterTime)) && ( (mstWeekday !== 6) || (mstWeekday !== 7) ) ) {
// Do something
}
如果我的浏览器设置为 MST,这似乎可行。如果我将其设置为其他时间,例如东京时间,则它不起作用。
解决方案
这就是我最终要做的(甚至不需要 moment.js):
var beforeTime = 1430; // 8:30 AM MST in UTC
var afterTime = 2330; // 5:30 PM MST in UTC
var date = new Date();
var currentHours = date.getUTCHours();
var currentMinutes = leadingZero(date.getUTCMinutes());
var currentTime = parseInt('' + currentHours + currentMinutes); // Make 24 hour (0000)
var currentDayMst = date.toLocaleString("en-US", {timeZone: "America/Edmonton"}); // Get current day of week in MST
currentDayMst = new Date(currentDayMst);
currentDayMst = currentDayMst.getDay();
// If not between 8:30am and 5:30pm OR Saturday OR Sunday, do stuff
if ( !( (currentTime >= beforeTime) && (currentTime <= afterTime) ) || (currentDay == 6) || (currentDay == 0) ) {
// Do stuff
}
function leadingZero (i) {
if (i < 10) {
i = "0" + i;
}
return i;
}