检查星期几是否在nodejs中的星期一和星期日之间

Check if day of week is between Monday and sunday in nodejs

我正在开发一个像 foodpanda 一样的食品应用程序,我面临一个问题,餐厅的开始日是星期一,结束日是星期五,我试图限制用户不要在星期六和星期日点餐(安排)(或餐厅停止营业的任何其他日子)。

我的数据库中也有开始日和结束日的值。

您可以通过

获取当前日期
let x = new Date()
x.getDay()

如果您希望日期是字符串而不是数字(在本例中为 0 到 6),请使用

var options = { weekday: 'long'};
console.log(new Intl.DateTimeFormat('en-US', options).format(x));

现在使用第一个解决方案:

let x = new Date().getDay()
if (x < 5) return // cancel order here.

好像是判断日期是否inside a range(数字范围内的数字)的问题。

假设您使用从星期日到星期六的天数为 0 到 6,它应该是这样的:

// Evaluating if a day is inside working shift ('_from' starting shift, '_to' ending shift) 
function inRange(day, _from, _to) {
  if(day >= _from && day <= _to)
    return true;

  return false;
}

编辑: 考虑之后,还有一些边缘情况我们没有考虑。

假设您星期一是非工作日(这在某些国家/地区可能很常见)。如果您尝试使用范围对其进行评估,您会发现周日也是非工作日(因为周日为 0,但范围从周一开始,即 1)。

因此,我们需要更改逻辑以检查询问的日期是否为非工作日。

最简单的方法是创建一个字典,将每一天映射到一个布尔值,它会说明那天是否有空:

let workingDays = {
  Sunday: true,
  Monday: true,
  Tuesday: true,
  Wednesday: true,
  Thursday: true,
  Friday: true,
  Saturday: true
}

那么,你只需要像这样指定非工作日

// Working everyday except by Monday
workingDays.Monday = false;

最后,您可以执行验证以检查餐厅是否会在要求的日期营业

// Am I working on Monday?
if(workingDays.Monday) {
  // do something
} else { 
  // nope. Come another day.
}

您还可以将字段名称指定为字符串,如果您想使用变量进行检查,这很有用

let requestedDay; // fill this variable somewhere else
...
// is the requested day available?
if(workingDays[requestedDay]) {
  // Do something
}

最后,由于getDay()的return值为0到6的整数,您可能需要按索引搜索:

// Monday == 1
if( workingDays[Object.keys(workingDays)[1]] )
  // blabla

或者您可以将其包装为函数以提高可读性

// Wrap function inside workingDays dictionary
workingDays.at = function(n) { return this[Object.keys(this)[n]] };

// Usage
workingDays.at(1); // gives Monday status (boolean)

最终代码:

// Creating dictionary
let workingDays = {
  Sunday: true,
  Monday: true,
  Tuesday: true,
  Wednesday: true,
  Thursday: true,
  Friday: true,
  Saturday: true,
  at: function(n) { return this[Object.keys(this)[n]] }
}

// Setting a day as non available
workingDays.Monday = false;
// or
workingDays["Monday"] = false;
// or 
workingDays.at(1) = false;

// Verifying whether a given day is available
if(workingDays[givenDay]) {
  // blabla
}

// or
if(workingDays.at(number)) {
  // blabla
}