检查星期几是否在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
}
我正在开发一个像 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
}