Search code examples
javascriptangularjsangularjs-scope

how to get number of days from angularjs


how to get number of days between two dates but its not working i think my date format not correct but how to change date format and get number of days

$scope.ChangeDate = function () {      
    var oneDay = 24 * 60 * 60 * 1000;
    var firstDate = $scope.Current.PlainnedStart;
    var secondDate = $scope.Current.PlainnedEnd;
    if (!angular.isUndefined(firstDate) && !angular.isUndefined(secondDate)) {
        var diffDays = Math.round(Math.abs((firstDate.getTime() - secondDate.getTime()) / (oneDay)));
        alert(diffDays);
        $scope.Current.NOD = ++diffDays;          
    }
}

enter image description here


<input type="text" onchange="angular.element(this).scope().ChangeDate()"
       id="date" ng-model="Current.PlainnedStart"
       class="floating-label mdl-textfield__input" placeholder=""> 

Solution

  • You should convert both dates into the JavaScript Date object. From what I can see, the inputs from both date inputs are in 'dd-mm-yyyy' format, and this will cause some problems if you try to directly convert it into the Date object. Instead, you should convert it to 'yyyy-mm-dd' before converting it to a date object.

    Then, you can calculate the difference between both dates.

    const str1 = '17-04-2019';
    const str2 = '20-04-2019';
    
    const toDate = dateStr => {
      const parts = dateStr.split('-');
      return new Date(parts[2], parts[1] - 1, parts[0]);
    }
    
    const diff =  Math.floor((toDate(str2) - toDate(str1) ) / 86400000); 
    
    console.log(diff)