将从日期1到日期2的最长日期设置为365天

Set max date from date1 to date2 up to 365 days

本文关键字:日期 设置 365天      更新时间:2023-09-26

我有两个jQuery日期选择器:

<p><label>Start Date:</label> </p><p>
    <input type="text" id="date1" name="date1" class="date-pick smallInput required"/>
    </p>
    <p><label>End Date:</label> </p><p>
    <input type="text" id="date2" name="date2" class="date-pick smallInput required"/>* 
    </p>
    <p><label>Total Period:</label> </p><p>
    <input type="text" id="Total_Period" name="Total_Period" class="smallInput required"/> * 
    </p>

我需要帮助为以下内容编写一些代码:

  1. 日期2不能晚于日期1 365天
  2. 计算Total_Period中日期1和日期2之间的天数

要计算设置为全天相同时间的两个日期之间的差异,请从另一个日期中减去一个并除以一天中的毫秒,然后四舍五入到最近的全天(考虑夏令时(:

function diffInDays(d0, d1) {
  var msDay   = 8.64e7;          // ms in 1 day
  var msLimit = 3.1536e10;       // ms in 365 days
  var diff = Math.abs(d1 - d0);  // diff in ms
  if (diff > msLimit) {
    return false;        // or throw error or whatever
  }
  // Return number of days
  // Rounding removes daylight saving effect +/- 1 hour
  return Math.round(diff / msDay);
}

请注意,这取决于你如何衡量一天。如果日期具有相同的时间(例如00:00:00.0(,则上述"有效"。然而,如果他们有不同的时间,那么可能不会。例如,2014-07-25 23:59:59和2014-07-26 00:00:01之间的差值是一天还是2秒(0天(?

如果时间可能不同,但您只想处理日期(即,上面的差异是1天而不是0天(,则复制日期并将其时间设置为相同时间:

function diffInDays(d0, d1) {
  // Copy dates so don't affect originals
  d0 = new Date(+d0);
  d1 = new Date(+d1);
  // Set to same time, midnight at start of day
  d0.setHours(0,0,0,0);
  d1.setHours(0,0,0,0);
  // rest of function is as above
  ...
}
console.log(diffInDays(new Date(2014,6,25,23,59,59), new Date(2014,6,26,0,0,1))); // 1
console.log(diffInDays(new Date(2014,0,1), new Date(2014,11,31)));  // 364

DEMO

JS代码:

 $(function () {
     var days_difference = 365;
    function addDays(theDate, days) {
        return new Date(theDate.getTime() + days*24*60*60*1000);
    }
    function subtractDays(theDate, days) {
        return new Date(theDate.getTime() - days*24*60*60*1000);
    } 
    function parseDate(str) {
        var mdy = str.split('/')
        return new Date(mdy[2], mdy[0]-1, mdy[1]);
    }
    function generate_difference()
    {
        var from_date = $("#from").datepicker( "getDate" );
        var to_date = $("#to").datepicker( "getDate" );
        //alert("In generate_difference 'n From date = "+from_date+" 'n To date = "+to_date);
            if(from_date != null && to_date != null)
            {
                var diff_days = (to_date-from_date)/(1000*60*60*24);
                $('#diff_days').val(diff_days);
            }
    }
     $("#from").datepicker({
         //defaultDate: "+1w",
         changeMonth: true,
         //numberOfMonths: 3,
         onClose: function (selectedDate) {
             //The selectedDate is in format mm/dd/yyyy so it should be convert to a valid javascript date
             selectedDate = parseDate(selectedDate);
             //alert("selectedDate = "+selectedDate+" parsed date = "+parseDate(selectedDate)+" new parsed = "+Date.parse(selectedDate));
             //Generate a new date by adding "no. of days i.e 365" to selected date
             var new_date = addDays(selectedDate, days_difference);
             //alert("selectedDate = "+selectedDate+" new_date = "+new_date);

             $("#to").datepicker("option", "minDate", selectedDate);
             $("#to").datepicker("option", "maxDate", new_date);
             generate_difference();
         }
     });
     $("#to").datepicker({
         //defaultDate: "+1w",
         changeMonth: true,
         //numberOfMonths: 3,
         onClose: function (selectedDate) {
             selectedDate = parseDate(selectedDate);
             var new_date = subtractDays(selectedDate, days_difference)
             //alert("selectedDate = "+selectedDate+" new_date = "+new_date);
             $("#from").datepicker("option", "minDate", new_date);
             $("#from").datepicker("option", "maxDate", selectedDate);
             generate_difference();
         }
     });
 });
<p><label>End Date:</label> </p><p>
<input type="text" id="date1" oninput="validate1()" name="date2" class="date-pick smallInput required"/>*
</p>
<p><label>End Date:</label> </p><p>
<input type="text" id="date2" oninput="validate2()" name="date2" class="date-pick smallInput required"/>* 
</p>
<p><label>Total Period:</label> </p><p>
<input type="text" id="Total_Period" name="Total_Period" class="smallInput required"/> *    </p>

在您的javascript 中

复制粘贴这个函数,只需为date2.更改一些内容

第二个是

function totalday()
{
var a =document.getElementById('date1');
var b =document.getElementById('date2');
var a =document.getElementById(total_period).value= a-b;
}