如何让这个javascript在午夜的营业时间工作?
我使用下面的javascript查看业务是否基于营业时间开放。这很简单,效果也很好,但我如何才能在午夜后的0:30或凌晨1:00这样的时间内完成这项工作呢。不幸的是,它只适用于17:00-23:00这样的时间,但不适用于17:00-030:如何让这个javascript在午夜的营业时间工作?,javascript,angularjs,datetime,time,Javascript,Angularjs,Datetime,Time,我使用下面的javascript查看业务是否基于营业时间开放。这很简单,效果也很好,但我如何才能在午夜后的0:30或凌晨1:00这样的时间内完成这项工作呢。不幸的是,它只适用于17:00-23:00这样的时间,但不适用于17:00-030: var d = new Date(); var n = d.getDay(); var now = d.getHours() + "." + d.getMinutes(); var weekdays = [ ["Sunday", 9.30, 12.0
var d = new Date();
var n = d.getDay();
var now = d.getHours() + "." + d.getMinutes();
var weekdays = [
["Sunday", 9.30, 12.00, 15.30,22.00],
["Monday", 8.30, 12.00, 15.30,19.00],
["Tuesday", 8.30, 12.00, 15.30,19.00],
["Wednesday", 8.30, 12.00, 15.30,19.00],
["Thursday", 8.30, 12.00, 15.30,19.00],
["Friday", 8.30, 11.30],
["Saturday"] // we are closed, sorry!
];
var day = weekdays[n];
if (now > day[1] && now < day[2] || now > day[3] && now < day[4]) {
console.log("We're open right now!");
}
else {
console.log("Sorry, we're closed!");
}
我知道这个脚本不支持时区,但这对我来说并不重要,因为这只适用于本地业务,因为本地业务总是与客户端位于同一时区
提前谢谢。
PS:原始脚本来自stackoverflow中的另一篇文章
更新版本我更改了脚本,因为我使用了来自firebase的json数据,并且已经获得了一天的时间,所以我不需要带有日期的数组
<script>
var d = new Date();
var n = d.getDay();
var now = d.getHours() + "." + d.getMinutes();
// this is what I get from firebase already
// so I dont need to loop throught the days but throught the 2 different opening times.
var day = {
"from": 8.30,
"to": 10,
"from2": 14.30,
"to2": 23
};
console.log('Now: ' + now);
if (now > day.from && now < day.to || now > day.from2 && now < day.to2) {
console.log("We're open right now!");
} else {
console.log("Sorry, we're closed!");
}
</script>
但是,如果我有17:00-01:00这样的时间,这就不起作用了。您可以使用当地时间或类似或的日期库 解析new Date.toLocalString并基于此日期时间处理数据
var date = new Date();
var formatted = date.toLocaleString('de-DE');
要获取时区,您可以使用navigator.language您可以尝试以下方法
var d = new Date();
var n = d.getDay();
var now = d.getHours() + "." + d.getMinutes();
var weekdays = [
["Sunday", 9.30, 12.00, 15.30,2.00],
["Monday", 8.00, 12.00, 15.30,19.00],
["Tuesday", 8.30, 12.00, 15.30,19.00],
["Wednesday", 8.30, 12.00, 15.30,19.00],
["Thursday", 8.30, 12.00, 15.30,19.00],
["Friday", 8.30, 11.30],
["Saturday"] // we are closed, sorry!
];
var day = weekdays[n];
if (now < day[1] && now > day[2] || now < day[3] && now > day[4]) {
console.log("Sorry, we're closed!");
}
else {
if(n != 0){
day = weekdays[n-1];
}
else{
day = 6;
}
if ((now > day[4])) {
console.log("Sorry, we're closed!");
}
else {
console.log("We're open right now!");
}
}
经过反复试验,我找到了一条自己的路。我最终创建了一个小函数。您可以向功能发送打开和关闭时间,并在业务打开或关闭时获得回复。可以在任何时间工作,也可以在午夜工作 然而,此脚本不适用于其他时区的业务,因为它不考虑任何基于位置的时间。如果您使用的是本地业务,其中客户与业务处于同一时区,则可以正常工作
// Example with JSON data for the current day.
var day = {
"from": 17.30,
"to": 1.30
};
var check_now = check_business_status(day.from, day.to);
console.log('The bussines is ' + check_now);
function check_business_status(from, to) {
var d = new Date();
var n = d.getDay();
var now = d.getHours() + "." + d.getMinutes();
console.log('Now: ' + now);
console.log(from + ' // ' + to);
// First check if to date is smaller than from date and their for tomorrow!
if (from > to){
console.info('Closing time is after midnight! Special Check...');
var status = '';
if (now < to && from > now) {
status = "open";
} else if (now > to && from > now) {
status = "closed";
} else if (now > to && from < now && now > from) {
status = "open";
}
} else {
console.info('Closing time is before midnight! Normal Check...');
if (now > from && now < to) {
status = "open";
} else {
status = "closed";
}
}
return status;
}
您还可以在JSFIDLE中使用不同的时间进行测试,您的版本仍然无法在17:30-01:00这样的时间工作。例如,如果更改[Sunday,9.30,12.00,15.30,1.00]并进行测试,则结果关闭!。我确实对上面的脚本进行了一些修改,因为我已经从firebase获得了当天的json时间。thx谢谢你的帮助。因此,如果你有固定的文件格式,你可以使用另一个if-else语句检查当前时间和前一天的截止时间。我不确定我是否理解你的示例,它在我的测试中也不适用。也许我解释错了。我设置了一个提琴,向你展示我目前所拥有的东西,我得到了当天json的开放时间。只要day.to或day.to 2次在同一天工作,但如果关闭时间在第二天午夜之后,则不会成功。因此,如果我将脚本编辑为day.to2,类似于1.30,它将失败。只要我用23:59就行了。也许你可以用我的小提琴。谢谢你的时间和帮助。@leoSorry,我的回答不太好,因为太晚了。但通知是要检查商店今天是否开门,如果没有,请在前一天检查24点后是否开门。你的问题是0.30不再是正确的一天,而是第二天。这就是为什么我将exampel与包含更多元素的数组一起使用的原因。但是如果你有这种特定类型的数据,你必须制作一些if案例来捕捉所有可能的案例。谢谢你的回复。我对momentjs的体验不好,因为ios上的结果与android或浏览器上的结果不同。出于这个原因,我想避免使用额外的javascript,比如momentjs或timezone等。我还想让它尽可能简单。