Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/449.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何让这个javascript在午夜的营业时间工作?_Javascript_Angularjs_Datetime_Time - Fatal编程技术网

如何让这个javascript在午夜的营业时间工作?

如何让这个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

我使用下面的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.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等。我还想让它尽可能简单。