Ion
Ion

Reputation: 21

Jquery calculate days with datepicker

How is it possible to calculate the total days using interval intitial and final DatePicker. Sorry for my bad english

$(".datepicker").datepicker({
        minDate: 0,
        numberOfMonths: [3,1],
        beforeShowDay: function(date) {
            var date1 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#input1").val());
            var date2 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#input2").val());
            return [true, date1 && ((date.getTime() == date1.getTime()) || (date2 && date >= date1 && date <= date2)) ? "dp-highlight" : ""];
        },
        onSelect: function(dateText, inst) {
            var date1 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#input1").val());
            var date2 = $.datepicker.parseDate($.datepicker._defaults.dateFormat, $("#input2").val());
            var selectedDate = $.datepicker.parseDate($.datepicker._defaults.dateFormat, dateText);


            if (!date1 || date2) {
                $("#input1").val(dateText);
                $("#input2").val("");
                $(this).datepicker();
            } else if( selectedDate < date1 ) {
                $("#input2").val( $("#input1").val() );
                $("#input1").val( dateText );
                $(this).datepicker();
            } else {
                $("#input2").val(dateText);
                $(this).datepicker();
            }
        }
    });

http://jsfiddle.net/sWbfk

Upvotes: 1

Views: 73

Answers (2)

Alexei - check Codidact
Alexei - check Codidact

Reputation: 23078

One way to compute date difference in days is the following:

  var t1 = Date.parse($("#input1").val()); // date1.getTime();
  var t2 = Date.parse($("#input2").val()); // date2.getTime();
  var difference = Math.abs(t2 - t1) / 86400000;
  $("#diff").val(difference);

(I tested by putting the code as the last lines of onSelect: function(dateText, inst)).

86400000 is the computed for 24h x 60min x 60s x 1000ms (number of milliseconds in a day)

Upvotes: 1

Rajesh
Rajesh

Reputation: 24915

When you are dealing with dates you should look into moment.js.

You can try something like this:

Moment

moment($("#input1").val()).diff(moment(selectedDate), "days");

Pure JS

var d1 = new Date(date1);
var d2 = new Date(selectedDate);
var secInDays = 24 * 60 * 60 * 1000;
d1.setHours(0, 0, 0, 0);
d2.setHours(0, 0, 0, 0);

console.log((+d2 - +d1) / secInDays)

Upvotes: 1

Related Questions