0

I want to Calculate no of days from two dates My date Format is dd-mmm-yyyy Like "10-Nov-2020" Can any one help me on same?

<script>
        var deFromDate;
        var deToDate;
        var statarr;
        function deFromDateChanged(s, e) {
            deFromDate = (s.GetInputElement().value)
            //statarr = deFromDate.split('-');
        }
        function deToDateChanged(s, e) {
            deToDate = (s.GetInputElement().value)
            var Difference_In_Time = deToDate.getTime() - deFromDate.getTime();
            var Difference_In_Days = Difference_In_Time / (1000 * 3600 * 24);
            alert(Difference_In_Days);
        }

    </script>

I am getting Error on getTime() Is there any other Approach to do same

cd d
  • 73
  • 6
  • I would assume `value` is returning a string. You need to convert it to a Date object. Assuming it's in a valid format use `new Date(value)` – Rory McCrossan Nov 03 '20 at 11:30
  • Does this answer your question? [How do I get the number of days between two dates in JavaScript?](https://stackoverflow.com/questions/542938/how-do-i-get-the-number-of-days-between-two-dates-in-javascript) – pilchard Nov 03 '20 at 11:30
  • @pilchard I have seen this answer but both scenarios is different from myone – cd d Nov 03 '20 at 11:43

2 Answers2

1

Using Date.parse() (though it is discouraged due to inconsistent implementation)

function datediff(first, second) {
    return Math.round((second-first)/(1000*60*60*24));
}

const deFromDate = Date.parse('10-Nov-2020');
const deToDate = Date.parse('15-Nov-2020');

console.log(datediff(deFromDate, deToDate));

Manual parsing

var months = {
    'Jan' : 1,
    'Feb' : 2,
    'Mar' : 3,
    'Apr' : 4,
    'May' : 5,
    'Jun' : 6,
    'Jul' : 7,
    'Aug' : 8,
    'Sep' : 9,
    'Oct' : 10,
    'Nov' : 11,
    'Dec' : 12
}
function parseDate(str) {
    var [dd, mmm, yyyy] = str.split('-');
    return new Date(yyyy, months[mmm]-1, dd); // months are 0 indexed
}

function datediff(first, second) {
    return Math.round((second-first)/(1000*60*60*24));
}

const deFromDate = parseDate('10-Nov-2020');
const deToDate = parseDate('15-Nov-2020');

console.log(datediff(deFromDate, deToDate));
pilchard
  • 12,414
  • 5
  • 11
  • 23
0

I tried using Regex:

 <script>
        var deFromDate;
        var deToDate;
        var dt1;
        var dt2;
        function deFromDateChanged(s, e) {
            deFromDate = (s.GetInputElement().value)
            dt1 = new Date(deFromDate.replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"));
        }
        function deToDateChanged(s, e) {
            deToDate = (s.GetInputElement().value)
            dt2 = new Date(deToDate.replace(/(\d{2})-(\d{2})-(\d{4})/, "$2/$1/$3"));
            var result = ((dt2 - dt1) / 86400000);
            alert(result);
        }

    </script>
cd d
  • 73
  • 6