【问题标题】:Javascript Generate Array of Hours in the Day Starting with Current Hour [closed]Javascript从当前时间开始在一天中生成小时数组[关闭]
【发布时间】:2018-08-21 01:14:36
【问题描述】:

您好,我正在尝试生成一天中每个小时的数组。但是,我希望它从当前时间开始。

例如,

如果当前时间是下午 2:00,数组应该开始:

['1400', '1500', '1600', 1700', '1800', '1900', '2000', '2100', '2200', '2300']

而不是

['0000', '0100', '0300', '0400', '0500', '0600', '0700', '0800', '0900', '1000', '1100', '1200 ', '1300', '1400', '1500', '1600', 1700', '1800', '1900', '2000', '2100', '2200', '2300']

【问题讨论】:

  • 如果你正在尝试,你的代码在哪里?
  • 使用.filterparseInt(new Date().getHours()) 过滤当天当前时间之前的所有时间。

标签: javascript jquery arrays date


【解决方案1】:

相当直接。见内联 cmets:

var result = [];                      // Results will go here
var nowHour = new Date().getHours();  // Get current hour of the day

// Loop from current hour number to 23
for(var i = nowHour; i < 24; i++){
  result.push(i + "00");  // Put loop counter into array with "00" next to it
}

console.log(result); // show results

【讨论】:

  • 嗨@scott-marcus,如果我想提前一个小时跳过,你知道我该怎么做吗?假设我不想从当前时间开始,而是想提前 1 小时。比如现在是下午 5 点,所以我想在 ['1800', '1900', '2000', '2100', '2200', '2300'] 开始数组
  • @lotsonj 是的,这很简单。您可以将循环更改为:for(var i = nowHour + 1; i &lt; 24; i++){,而不是 for(var i = nowHour; i &lt; 24; i++){,以便比当前小时多开始一个。
【解决方案2】:

它可以在单个语句中相当有效地完成,包括在 10:00 之前的几个小时内使用前导零,并且通常使用带有可选回调的 Array.from,例如

console.log(
  Array.from(Array(24-new Date().getHours()),(x,i)=>('0'+(23-i)).slice(-2)+'00').reverse()
);

不幸的是,它仍然创建了 2 个数组,第一个是所需长度的空数组,然后用于生成具有所需值的第二个数组,因此对性能影响不大。

如果有一个 forEvery 方法没有像 from 那样跳过不存在的属性,它可能只有一个数组 (就像 for 循环一样)。

【讨论】:

    【解决方案3】:

    您可以使用fillmapArray.Prototype 如下所示。

    Array(24-new Date().getHours()).fill().map((e,i)=>i+new Date().getHours());
    

    var currHour=new Date().getHours();
    console.log(Array(24-currHour).fill().map((e,i)=>i+currHour+"00"));

    【讨论】:

    • 非常感谢@yajiv,这正是我想要的。非常感谢您的帮助。
    • 嗨@yajiv,你和斯科特都给出了很好的答案,我非常感谢你的帮助。我在他之前看到了你的。抱歉,我检查并取消检查了您的答案。后来我看到了他的回答,只是认为他的答案更接近我在包含 for 循环的情况下寻找的内容。我仍然感谢您的回答并投了赞成票。我 StackOverflow 允许选择多个答案作为最佳答案。我也会标记你的。对不起
    • 这是一个非常低效的算法。它创建了许多不必要的 Date 对象,一个本质上只是用作计数器的数组,仍然需要额外的处理来在 10:00 之前添加前导零。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-03
    • 1970-01-01
    • 2017-05-19
    • 2011-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多