Javascript - 将工作日添加到用户选择的日期

时间:2013-10-09 20:47:54

标签: javascript datepicker

我需要将用户定义的工作日添加到用户定义的日期,并将其显示在警告框中。

请您查看我的代码,让我知道需要改变的地方:

请参阅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()"/>

1 个答案:

答案 0 :(得分: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 ,选定日期 2 ,则该函数会产生 16.Oct.2013

相关问题