【发布时间】:2021-10-18 12:57:25
【问题描述】:
我正在开发一个类似于 foodpanda 的食品应用程序,我面临的问题是餐厅的开始日是星期一,结束日是星期五,我试图限制用户不要在星期六和星期日(或任何其他日子餐厅将停止服务)。
我的数据库中也有开始日和结束日的值。
【问题讨论】:
标签: javascript node.js days
我正在开发一个类似于 foodpanda 的食品应用程序,我面临的问题是餐厅的开始日是星期一,结束日是星期五,我试图限制用户不要在星期六和星期日(或任何其他日子餐厅将停止服务)。
我的数据库中也有开始日和结束日的值。
【问题讨论】:
标签: javascript node.js days
你可以得到当前日期
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()的返回值是一个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
}
【讨论】: