1

I'm using jquery datepicker in order to get 2 dates. In my case I have to get the date in this format d-M-y. I'm using it in order to be able to insert the values into an oracle database without any formating. The problem is that I need to calculate the months between 2 dates. For example: 1-Oct-13 - 30-Oct-16.

Here is how I'm getting the dates in my js:

LastAssimDatePicker = (function() {
                        $( "#lastAssimilationDate" ).datepicker({
                            yearRange: "-20:+100",
                            changeMonth: true,
                            changeYear: true,
                            dateFormat: "d-M-y"
                        });
                    }),

LastAssimDateOverPicker = (function() {
                        $( "#lastAssimilationDateOver" ).datepicker({
                            yearRange: "-20:+100",
                            changeMonth: true,
                            changeYear: true,
                            dateFormat: "d-M-y"
                        });
                    }),

The above dates are assigned to 2 variables - lastAssimilationDate and LastAssimDateOver

The problem is that I really can't find a way to calculate the months between the 2 dates and I already lost about 2 hours on it. I'm pretty sure that there will be an easy solution, but as a beginner, I'm not able to spot it. I know that there are simmilar topics here, but I can't get it working, or it does not fit on my issue.

Slim
  • 1,708
  • 5
  • 37
  • 60

3 Answers3

4

Working Demo http://jsfiddle.net/w54pq/ or in case you want both month included try this demo: http://jsfiddle.net/yQyJq/

This will fit your need, there can be many version for it.

Please note there can be various combinations with your need so feel free to play around with this code.

Old link one of which is my old reply:

Hope this helps :)

code

$('.start,.end').datepicker();

$('.hulk').click(function () {
    var sDate = $('.start').val();
    var nDate = $('.end').val();

    var startdate = new Date(sDate);
    var enddate = new Date(nDate);

    enddate.setDate(enddate.getDate() - startdate.getDate());
    alert(monthDiff(startdate,enddate));
});


function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;
    months -= d1.getMonth() + 1;
    months += d2.getMonth();
    return months <= 0 ? 0 : months;
}

Working shot

enter image description here

Community
  • 1
  • 1
Tats_innit
  • 33,991
  • 10
  • 71
  • 77
3

Since you mentioned that you are not supposed to change the format I have a solution for you.

With the help of @T.J. Crowder's Answer, I done this

d1 = new Date($( "#lastAssimilationDate" ).val());
d2 = new Date($( "#lastAssimilationDateOver").val());
alert(monthDiff(d1, d2));

Check this JSFiddle

Not sure Nan is popping, but I am able to see difference.

enter image description here

Community
  • 1
  • 1
Praveen
  • 55,303
  • 33
  • 133
  • 164
3
    function calcualteMonthYr(){
    var fromDate =new Date($('#txtFrom').val()); //datepicker (text fields)
    var toDate = new Date($('#txtTo').val()); // datepicker

     var months;
        months = (toDate.getFullYear() - fromDate.getFullYear()) * 12;
        months += toDate.getMonth();
        if (toDate.getDate() < fromDate.getDate())
        {
            months--;
        }
    $('#txtTimePeriod2').val(months);
}
// it also consider dates so you would get exact months ..
Slim
  • 1,708
  • 5
  • 37
  • 60