如何将日期范围限制为仅15天

时间:2018-10-03 06:52:18

标签: javascript jquery

我只想将日期限制为15天,我已经写了一些代码,但是不知道我要去哪里。如果有人可以指导我,那将是有帮助的。

这是我的完整代码,我正在应用条件还检查日期是否大于15,但它不起作用

<body>
<form>
    <div class="container">
       <h4>Start Date:</h4>
            <input  type="text" id="startdate" name="fromdate" width="276"
                placeholder="dd/mm/yyyy" required onchange="checkDate()" />
            <h4>End Date:</h4>
            <input  type="text" id="enddate" name="todate" width="276"
                placeholder="dd/mm/yyyy" required onchange="checkDate()"/>
    </div>
    <input type="submit" value="submit">
    </form>
    <script>
    var today = new Date(new Date().getFullYear(), new Date().getMonth(),
            new Date().getDate());
    $('#startdate').datepicker({
        uiLibrary : 'bootstrap4',
        iconsLibrary : 'fontawesome',
        format : 'dd/mm/yyyy',

        maxDate : function() {
            return $('#enddate').val();

        }
    });
    $('#enddate').datepicker({
        uiLibrary : 'bootstrap4',
        iconsLibrary : 'fontawesome',
        format : 'dd/mm/yyyy',

        minDate : function() {
            return $('#startdate').val();
        }

    });

        //function to check wether date is more than 15 its not workin
        //all plugins are there u just have to run 

        function checkDate(){
            var start = $('#startdate').val();
            var end = $('#enddate').val();
            //convert strings to date for comparing
            var startDate = new Date(start);
            var endDate = new Date(end);
            // Calculate the day diffrence
            var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
            var diffDays = Math.abs((endDate.getTime() - startDate.getTime()) / (oneDay));  
            if(diffDays > 15){
                 alert("Days are more then fifteen");

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

here is the fiddle

3 个答案:

答案 0 :(得分:0)

看看这个答案,这里我也使用了moment.js库。这将限制为15天。希望此样本能为您提供解决方案

$(document).ready(function(){
$('#date-of-ending').datepicker({
autoclose: true,
format:"dd/mm/yyyy"

})
$('#date-of-starting').datepicker({
autoclose: true,
format:"dd/mm/yyyy"

}).on('changeDate', function (selected) {          
            var xDays = 15;
            var selectedDate = moment(selected.date,"DD/MM/YYYY").format("MM/DD/YYYY")
            var maxDate = moment(selectedDate.valueOf()).add(xDays, 'days').format('DD/MM/YYYY'); // This is from moment js library
            $('#date-of-ending').datepicker('setEndDate', maxDate);
        });
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/js/bootstrap-datepicker.min.js"></script>
<link href="https://cdnjs.cloudflare.com/ajax/libs/bootstrap-datepicker/1.8.0/css/bootstrap-datepicker.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment.min.js"></script>

 <input id="date-of-starting" type="text" name="startDate" value="" readonly class="form-control" required />
 
 <input id="date-of-ending" type="text" name="endDate" value="" readonly class="form-control" required />

答案 1 :(得分:0)

问题出在您使用的日期格式。 dd / mm / yyyy不是Date.parse()可以处理的格式。

  

代表日期的字符串值。字符串应采用以下格式   由Date.parse()方法识别

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date#Parameters

因此,您可以将格式更改为“ mm / dd / yyyy”,也可以使用moment.js处理日期操作。

如果您希望坚持使用相同的格式和日期库,则可以使用解决方案here

PS:我注意到您之前曾问过同样的问题,但接受的答案有问题。发生这种情况时,请对答案发表评论,而不要提出duplicate

答案 2 :(得分:0)

这是因为您的日期选择器的格式为dd/mm/yyyy,但是Date构造函数将其转换为mm/dd/yyyy

var date = '01/03/2018'
var d = new Date(date);
console.log(d.toString())

您需要调整代码以使用dd/mm/yyyy格式

function checkDate(start, end){
            
            //convert strings to date for comparing
            var startDate = createDate(start);
            var endDate = createDate(end);
            // Calculate the day diffrence
            var oneDay = 24 * 60 * 60 * 1000; // hours*minutes*seconds*milliseconds
            var diffDays = Math.abs((endDate.getTime() - startDate.getTime()) / (oneDay));  
            if(diffDays > 15){
                 console.log("Days are more then fifteen");

            } else {
                console.log("Less than 15 days")
            }
        }
        
        function createDate(datestr){
          var datearr = datestr.split("/");
          var d = new Date(datearr[2], Number(datearr[1]) - 1, datearr[0])
          return d;
        }
        
        checkDate("01/02/2018", "10/02/2018")
        checkDate("01/02/2018", "30/02/2018")

jsfiddle