【问题标题】:Check if day of week is between Monday and sunday in nodejs检查nodejs中的星期几是否在星期一和星期日之间
【发布时间】:2021-10-18 12:57:25
【问题描述】:

我正在开发一个类似于 foodpanda 的食品应用程序,我面临的问题是餐厅的开始日是星期一,结束日是星期五,我试图限制用户不要在星期六和星期日(或任何其他日子餐厅将停止服务)。

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

【问题讨论】:

标签: javascript node.js days


【解决方案1】:

你可以得到当前日期

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.

【讨论】:

  • 谢谢,实际上我的问题是,餐厅的开始日是星期三,结束日是星期五,但用户想在星期四安排订单,我怎么能找到星期四是否是工作日。我的问题是如何检查星期四在星期五之间的星期三
【解决方案2】:

这似乎是评估这一天是否为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()的返回值是一个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
} 

【讨论】:

  • 感谢它的工作
猜你喜欢
  • 2012-04-24
  • 1970-01-01
  • 2021-06-29
  • 2015-08-19
  • 1970-01-01
  • 2013-12-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多