【问题标题】:Count dates between two HTML Date input fields real time [duplicate]实时计算两个HTML日期输入字段之间的日期[重复]
【发布时间】:2016-12-25 11:48:55
【问题描述】:

我正在为记录我办公室的内部休假做一个简单的申请。使用此应用程序,我必须为用户提供两个 HTML 日期字段,用于选择开始休假日期和结束休假日期。同时我需要计算用户选择之间有多少天,这个计数可能不包括工作日。为此,我尝试使用带有日期字段 onchange 事件之一的简单 javascript,但它不起作用

这是我尝试过的完整的 HTML 代码

<html >
<head>
</head>
<body>
 <form action='reqprocess.php' method='post'>
            <td><input type="date" name="datepicker" class='form-control' id="startd" required/> <br>
            <td><input type="date" name="datepicker2" class='form-control' id="endd"required /> <br>
            <td><input type="text" name='leavehmd' class='form-control' id="lhmd"/><br>
            <input type='submit' value='Apply' class='btn btn-primary' />
</form>

        <script type="text/javascript">

        var chng1 = document.getElementById("endd");
         chng1.onchange = function () {
             var date1 = Date.parse(document.getElementById("startd").value);
             var date2 = Date.parse(document.getElementById("endd").value);
             if (date1 && date2) {
                 var timeDiff = Math.abs(date2.getTime() - date1.getTime());
                 var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
                 //alert(diffDays);
                 document.getElementById("lhmd").value = diffDays;
             }
         }

         var chng2 = document.getElementById("startd")
        chng2.onchange = function () {
             var date1 = Date.parse(document.getElementById("startd").value);
             var date2 = Date.parse(document.getElementById("endd").value);
             if (date1 && date2) {
                 var timeDiff = Math.abs(date2.getTime() - date1.getTime());
                 var diffDays = Math.ceil(timeDiff / (1000 * 3600 * 24)); 
                 //alert(diffDays);
                 document.getElementById("lhmd").value = diffDays;
             }
         }

        </script>
</body>
</html>

但是当第二个日期时,更改功能不起作用,并且输入字段假设填充未填充的计数日期。我该如何解决这个问题?

或者我如何通过 ajax 或 jquery 等方法实现这一目标

【问题讨论】:

  • 请同时发布第二个输入的on change功能
  • ^ 以及您希望日期采用什么格式?
  • 对不起,我只为第二个输入字段编写更改事件。因为要输入结束日期,用户必须填写开始日期,我错过了什么吗?
  • 格式为 mm/dd/yyyy

标签: javascript jquery ajax html html-input


【解决方案1】:

在尝试计算差异之前,您需要确保每个输入字段中都有一个值

您可以通过设置一个将值作为操作数的条件来检查这一点。如果没有价值,他们将评估为虚假,如果有价值,他们将评估为真实。如果两个值都存在,则可以计算差值。

链接的重复问题有一个很好的干净的方法来计算日期之间的天数:

function parseDate(str) {
    var mdy = str.split('/');
    return new Date(mdy[2], mdy[0]-1, mdy[1]);
}

function daydiff(first, second) {
    return Math.round((second-first)/(1000*60*60*24));
}


var chng1 = document.getElementById("endd");
var chng2 = document.getElementById("startd");
chng1.onchange = displayCurrentDayDifference();
chng2.onchange = displayCurrentDayDifference();

function displayCurrentDayDifference() {
    var date1 = document.getElementById("startd").value;
    var date2 = document.getElementById("endd").value;
    if (date1 && date2) {
        var daysBetween = daydiff(parseDate($('#startd').val()), parseDate($('#endd').val()));
        document.getElementById("lhmd").value = daysBetween;
    }
}

【讨论】:

  • 我尝试了你的答案,无论我多么努力地尝试更改事件都不起作用,
  • 能否请您也检查一下我更新的问题?
猜你喜欢
  • 1970-01-01
  • 2014-11-30
  • 2013-03-30
  • 2020-05-15
  • 2014-07-08
  • 2012-12-26
  • 2012-01-31
  • 2012-12-07
相关资源
最近更新 更多