【问题标题】:How to create an array of times from in jquery with one hour interval?如何在 jquery 中以一小时的间隔创建一个时间数组?
【发布时间】:2016-09-28 13:00:12
【问题描述】:

我搜索了很多,找到了一些示例,但没有一个没有按预期工作。我正在尝试创建特定日期的可用时间段,并希望显示如下时间:

10.00 |可用

11.00 |可用

12-00 |可用

13.00 |可用

等等

例如,现在开始时间为 16.00(我所在时区的当前时间 UTC+02:00),其余时间应禁用。然后明天再次从 00.00 开始。我应该如何做到这一点?

我现在拥有的是这样的:

var arr = [], i, j;
for(i=0; i<24; i++) {
  for(j=0; j<1; j++) {
    arr.push(i + ":" + ("00") );
  }
}

var d = new Date(),
    h = d.getHours(),
    m = 15 * Math.floor(d.getMinutes() / 15),
    stamp = h + ":" + (m === 0 ? "00" : m);

var pos = arr.indexOf(stamp),
    timelist = arr.slice(pos).concat(arr.slice(0, pos));

console.log(arr);

这给了我这个

["0:00", "1:00", "2:00", "3:00", "4:00", "5:00", "6:00", "7:00", "8:00", "9:00", "10:00", "11:00", "12:00", "13:00", "14:00", "15:00", "16:00", "17:00", "18:00", "19:00", "20:00", "21:00", "22:00", "23:00"]

编辑

我认为与其创建一个新问题,不如详细说明这一点。 是否可以像这样显示时隙:

10.00 - 11.00 |可用

12.00 - 13.00 |可用

13-00 - 14.00 |可用

15.00 - 16.00 |可用

【问题讨论】:

    标签: javascript jquery


    【解决方案1】:

    为什么要削减数组,而不是获取实际小时并更改您的 for 循环:

    var date = new Date;
    var hour = date.getHours();
    
    var arr = [];
    for(var i=hour; i<24; i++) {
      arr.push(i + ":00") );
    }
    console.log(arr);

    如果你也想显示过去的时间,为什么不做两个数组:

    var date = new Date;
    var hour = date.getHours();
    
    var pastHours = [],
        futureHours = [];
    for( var i=0; i<hour; i++ ) {
      pastHours.push(i+":00");
    }
    for(var i=hour; i<24; i++) {
      futureHours.push(i + ":" + ("00") );
    }
    console.log(pastHours);
    console.log(futureHours);

    或者在一个数组中:

    var arr = [];
    for( var i=0; i<24; i++ ) {
      arr.push(i+":00");
    }
    
    var date = new Date,
        hour = date.getHours(),
        hourIndex = arr.indexOf(hour+":00");
    
    var pastHours = arr.slice(0,hourIndex);
    var futureHours = arr.slice(hourIndex);
    
    console.log(pastHours);
    console.log(futureHours);

    【讨论】:

    • 有什么方法可以显示过去的时间但禁用它们?喜欢把它们变灰。
    • 没问题,我已经添加了第三个替代方案... :)
    • 那就更好了兄弟!干杯
    【解决方案2】:
    var d=new Date();
    i=d.getHours();
    times=[];
    while(i<24){
    times.push("today "+i+":00 available");
    i++;
    }
    

    times 现在不包含 15 到 24 作为字符串。您可以使用循环添加其他日期

    【讨论】:

      【解决方案3】:

      这是我的方法。它将从现在开始将所述间隔的小时数放入数组中,不包括 disabled 数组中的小时数。

      var interval = 24 //hours
      var disabled = [4, 16];
      var date = new Date();
      var arr = [];
      for (var i = 0; i < interval; i++) {
          var newDate = new Date(date.getTime() + 60*60*1000*i);
          console.log(newDate.getHours())
        if(newDate.getHours() < disabled[0] || newDate.getHours() > disabled[1]) {
          arr.push(newDate.getHours())
        }
      }
      console.log(arr);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-11-04
        • 2022-01-22
        • 2021-12-21
        • 1970-01-01
        相关资源
        最近更新 更多