首页 > 解决方案 > 使用moment.js检查时间是否在两次之间,而不是在某个时区的周末

问题描述

如果世界上任何地方的当前时间在上午 8:30 到下午 5:30 之间并且不是山区标准时间的周末,我正在尝试执行一些代码。我正在加载moment-with-locales.min.jsmoment-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,这似乎可行。如果我将其设置为其他时间,例如东京时间,则它不起作用。

标签: momentjs

解决方案


这就是我最终要做的(甚至不需要 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;
    }

推荐阅读