【问题标题】:Fill array with list of hours in a duration 24h-format用持续时间 24 小时格式的小时列表填充数组
【发布时间】:2020-08-18 19:48:14
【问题描述】:

我有两个输入来选择一个小时范围,如下所示:

<input type="text" id="from" name="from" value="1:00" />
<input type="text" id="to" name="to" value="20:00" />

我使用jQuery将数据存储在类似数组的波纹管中:

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

如果 hour-to 输入大于 hour-from 输入,我找到了一种方法,而不是我按照以下方式进行操作

let hoursTo = $('#to').val();
let hoursFrom = $('#from').val();
if (hoursFrom < hoursTo) {
        for (let i = hoursFrom; i <= hoursTo; i++) {
            runHoursArray.push(i.toString());
        }
    }else {
// need help in the store logic in order to cover nightshifts 
}

但这不包括夜班,因此,我需要帮助来存储如下数据。

预期结果:

如果我选择从 19:00 到 2:00,它应该显示如下:

["19","20","21","22","23","0","1","2"]

注意:我只想存储小时数

谢谢。

【问题讨论】:

  • 那么,在 else 分支中做两个循环呢?一个从 hoursTo 到

标签: javascript jquery time


【解决方案1】:

根据解释和大量假设,我正在写这个答案。

在写答案之前,我希望你更正这部分。您需要.val() 进行比较。你不是在比较元素。

let hoursTo = $('#to').val();
let hoursFrom = $('#from').val();

如果您也想添加夜班,那么是的,您必须允许这样的值。你可以做的是,检查持续时间,如果持续时间不人道,比如 23 小时(通常没有人愿意工作 23 小时),就告诉它是无效的。

为此,您可以执行以下操作:

let hoursFrom = +$('#from').val();
let hoursTo = +$('#to').val();

$("button").click(function () {
  if ((hoursFrom > hoursTo && hoursTo + 24 - hoursFrom <= 12) || hoursFrom <= hoursTo) {
    console.log("Valid");
  } else {
    console.log("Invalid");
  }
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input id="from" type="number" />
<input id="to" type="number" />
<button>Validate</button>

【讨论】:

  • 感谢您的回答,我更正了您提到的val(),但我认为您误解了我的问题不是允许我的问题是存储它们的问题的目的。
  • @KamelMili 也许...你能澄清一下,以便我们俩步调一致。 ? 我们都知道存在某种沟通鸿沟。很高兴为您提供更好的指导。
  • @KamelMili Ahhh,存储它们...好吧,让我想想...?
【解决方案2】:

受@CBroe 评论的启发,我这样做了:

if (hoursFrom < hoursTo) {
        for (let i = hoursFrom; i <= (hoursTo + 1); i++) {
            if (i !== 24) {
                runHoursArray.push(i.toString());
            } else {
                runHoursArray.push("0");
            }
        }
    } else {
        for (let i = 0; i <= (hoursTo + 1); i++) {
            runHoursArray.push(i.toString());
        }
        if (hoursFrom > 12) {
            for (let j = hoursFrom; j <= 23; j++) {
                runHoursArray.push(j.toString());
            }
        } else {
            for (let i = hoursTo; i <= (hoursFrom + 1); i++) {
                runHoursArray.push(i.toString());
            }
        }       
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 2016-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多