Проверьте, находится ли время между двумя, а не выходными в определенном часовом поясе с моментом. js - PullRequest
0 голосов
/ 03 марта 2020

Я пытаюсь выполнить какой-то код, если текущее время в любой точке мира между 8:30 и 17: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, похоже, это работает. Если я установлю его на что-то другое, например, на токийское, это не сработает.

Ответы [ 2 ]

0 голосов
/ 14 марта 2020

Это то, что я закончил (мне даже не понадобился момент. 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;
    }
0 голосов
/ 03 марта 2020

Попробуйте использовать момент-часовой пояс для операций, связанных с часовым поясом

Следующее может помочь вам

const moment = require("moment-timezone");
var beforeTime = moment.tz("08:30", "hh-mm", "MST");
var afterTime = moment.tz("17:30", "hh-mm", "MST");
var date = moment("21-03-2020");
var mstWeekday = moment(date, "d", "MST");
if (
  date.isBetween(beforeTime, afterTime) &&
  (mstWeekday !== 6 || mstWeekday !== 7)
) {
  console.log("in here");
}

...