簡體   English   中英

將最大日期從date1設置為date2,最多365天

[英]Set max date from date1 to date2 up to 365 days

我有2個jQuery datepickers:

<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. date2在date1之后不能超過365天
  2. 計算Total_Period中date1和date2之間的天數

要計算整天設置為同一時間的兩個日期之間的差異,請從另一個日期中減去一個日期,再除以一天中的毫秒數,然后四舍五入到最接近的整天(夏令時帳戶):

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
<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;
}

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();
         }
     });
 });

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM