2013-10-09 96 views
0

我需要將用戶定義的工作日添加到用戶定義的日期並將其顯示在警報框中。Javascript - 將工作日添加到用戶選擇的日期

能不能請你看看我的代碼,讓我知道什麼需要改變:

JSFiddle

Select Business Days To Add<br> 
<select name="coll" id="t1"> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
</select><p> 

    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 
    <script> $(function() { $("#datepicker").datepicker(); }); </script> 

<input id="datepicker" onchange="alert()"/> 

回答

0

一開始編寫一個函數,它選擇的日期和天數:

<center>Select Business Days To Add<br> 
<select name="coll" id="t1"> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
</select><p> 

    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 
    <script> $(function() { $("#datepicker").datepicker(); }); 
    function getSelectedDate() { 
      var day = $("#datepicker").datepicker("getDate");  
      var daysToAdd = $("#t1").val(); 
      return Number(daysToAdd) + Number(day.getDate()); 
     } 
    </script> 

<input id="datepicker" onchange="alert(getSelectedDate());"/> 

我想工作日是指從星期一到星期五,因此星期五加1意味着實際上星期一而不是星期六。

而且

  • 你需要看,如果當前日期是週五兩天添加到 選擇工作日躍過週末 - 使用getDate()
  • 如果是月底(關於連和不均勻月30日和31 天,二月的飛躍,而不是閏年),並根據需要增加 月太 - 用getMonth
  • 如果是在今年年底,增加了一年 - 用getFullYear

代碼(而不檢查週末)看起來像這樣:

<center>Select Business Days To Add<br> 
<select name="coll" id="t1"> 
<option value="1">1</option> 
<option value="2">2</option> 
<option value="3">3</option> 
</select><p> 

    <script src="http://code.jquery.com/ui/1.10.3/jquery-ui.js"></script> 
    <script> $(function() { $("#datepicker").datepicker(); }); 

     function isEndOfMonth(date) { 
     // day of month from 1 to 31 
     var selectedDay = date.getDate(); 
     // months with 31 days 
     if (date.getMonth() == 0 || date.getMonth() == 2 || 
      date.getMonth() == 4 || date.getMonth() == 6 || 
      date.getMonth() == 7 || date.getMonth() == 9 || 
      date.getMonth() == 11) { 
      return selectedDay == 31; 
     } 
     // february 28/29 days TODO check for leap year! 
     if (date.getMonth() == 1) { return selectedDay == 28; } 

     // months with 30 days 
     if (date.getMonth() == 3 || date.getMonth() == 5 || 
      date.getMonth() == 8 || date.getMonth() == 10) { 
      return selectedDay == 30; 
     } 
      return false; 
     } 

     function isEndOfYear(month) { 
      return month > 11; 
     } 

     function getSelectedDate() { 
      var day = $("#datepicker").datepicker("getDate"); 

      var daysToAdd = Number($("#t1").val()); 
      // values from which the new date is constructed 
      var selectedMonth = day.getMonth(); 
      var selectedYear = day.getFullYear(); 
      var selectedDay = day.getDate(); 
      // 
      if (isEndOfMonth(day)) { 
       // start new month 
       selectedDay = 1; 
       selectedMonth++; 
       if (isEndOfYear(selectedMonth)) { 
        // start new year 
        selectedYear++; 
       } 
      } 
      // add business days 
      selectedDay += daysToAdd; 
      // TODO check if the result is weekend and jump over it. After a jump the same checks as above should be called! 
      return new Date(selectedYear, selectedMonth, selectedDay, 0, 0, 0, 0); 
     } 
    </script> 

<input id="datepicker" onchange="alert(getSelectedDate());"/> 

如果例如所選擇的日期是14.Oct.2013,選擇天,函數產生16.Oct.2013