2017-05-30 74 views
1

我想计算两个日期之间的月份和日期。然后需要计算用户在开始日期和结束日期之间支付的费用。如何查找两个日期之间的确切月份和日期 - angularjs

成本= 10000.00; Periodicity = 3(Quaterly);

月份和天数=(开始日期 - 结束日期);

付款需要支付=(((月和日/周期数)*费用);

我试图找到两个日期之间的时间差,但它不适合我。谁能帮我?

var date = "2017-06-01"; 
      console.log("date: "+date); 
      var currentDate = $filter('date')(date, "yyyy-MM-dd HH:mm:ss"); 

      $scope.userdob = "2017-08-31"; 
      var dobdate = $filter('date')($scope.userdob, "yyyy-MM-dd HH:mm:ss"); 

      console.log("dob: "+dobdate); 

      /* differentiate Date */    
      var date1 = $filter('date')($scope.userdob, "yyyy-MM-dd"); 
      var date2 = $filter('date')(date, "yyyy-MM-dd"); 

      date1 = date1.split('-'); 
      date2 = date2.split('-'); 

      // Now we convert the array to a Date object, which has several helpful methods 
      date1 = new Date(date1[0], date1[1], date1[2]); 
      date2 = new Date(date2[0], date2[1], date2[2]); 

      if (date1 < date2) 
      { 
       var start_date = date1; 
       var end_date = date2; 
       var inverse = false; 

       end_date = new Date(end_date); //If you don't do this, the original date passed will be changed. Dates are mutable objects. 
       end_date.setDate(end_date.getDate() + 1); 

       // Calculate the differences between the start and end dates 
       var yearsDifference = end_date.getFullYear() - start_date.getFullYear(); 

       var monthsDifference = end_date.getMonth() - start_date.getMonth(); 

       var daysDifference = end_date.getDate() - start_date.getDate(); 

       var d1 = new Date(end_date.getFullYear(), end_date.getMonth(), 0); 
       var noOfDays = d1.getDate(); 

       $scope.noOfMonths = (inverse ? -1 : 1) * (yearsDifference * 12 + monthsDifference + daysDifference/noOfDays); // Add fractional month 
+0

你是什么意思一个月?整个30天的时间? –

+0

玩日期是一种痛苦,我的建议是检查[momentjs](https://momentjs.com/)之类的东西 - 虽然这不能回答你的问题,但这个图书馆为我节省了大量的时间:)它会打破实际的日历月和闰年等 –

回答

0

日期操作是非常棘手的,以得到正确的。有闰年,闰秒和其他各种形式的时间调整发生。对于一个很大,但没有详尽无遗的清单,结帐Falsehoods programmers believe about timeMore falsehoods programmers believe about time。在做日期和时间不平凡的事情时,最好的办法是使用一个好的图书馆,如moment。当然,它不会得到任何正确的结果,但对于大多数目的而言,它会做足够好的工作。

它可以处理解析你一样,所以前面的代码可以成为这样的事情:

const date1 = moment($filter('date')($scope.userdob, "yyyy-MM-dd")); 
const date2 = moment($filter('date')(date, "yyyy-MM-dd")); 

const diffInMonths = date1.diff(date1, 'months'); 
const diffInDays = date1.diff(date2, 'days'); 
+0

谢谢你的建议。 – sudarsan

1
function findDateDifferenceInDays(sdate,edate) { 
    var oneDay = 24*60*60*1000; 
    var firstDate = new Date(sdate); 
    var secondDate = new Date(edate); 

    return Math.round(Math.abs((firstDate.getTime() - secondDate.getTime())/(oneDay))); 
} 
+0

谢谢你的建议。 – sudarsan

0

这解决了我的问题。

$scope.startDate = new Date(startDate); 

       $scope.endDate = new Date(endDate); 

       console.log($scope.startDate); 
       console.log($scope.endDate); 

       /* differentiate Date */    
       var date1 = $filter('date')($scope.startDate, "yyyy-MM-dd"); 
       var date2 = $filter('date')($scope.endDate, "yyyy-MM-dd"); 

       console.log("date1 : "+date1); 
       console.log("date2 : "+date2); 

       date1 = date1.split('-'); 
       date2 = date2.split('-'); 

       // Now we convert the array to a Date object, which has several helpful methods 
       /*date1 = new Date(date1[0], date1[1], date1[2]); 
       date2 = new Date(date2[0], date2[1], date2[2]);*/ 

       console.log("date1 : "+date1); 
       console.log("date2 : "+date2); 
       if ($scope.startDate < $scope.endDate) 
       { 
        var start_date = date1; 
        var end_date = date2; 
        var inverse = false; 
        console.log("end_date : "+end_date); 

        end_date = new Date(end_date); //If you don't do this, the original date passed will be changed. Dates are mutable objects. 
        console.log("end_date : "+end_date); end_date.setDate(end_date.getDate() + 1); 

        start_date = new Date(start_date); 


        // Calculate the differences between the start and end dates 
        var yearsDifference = end_date.getFullYear() - start_date.getFullYear(); 

        var monthsDifference = end_date.getMonth() - start_date.getMonth(); 

        var daysDifference = end_date.getDate() - start_date.getDate(); 

        var d1 = new Date(end_date.getFullYear(), end_date.getMonth(), 0); 
        var noOfDays = d1.getDate(); 

        if(noOfDays >= 30) { 
         noOfDays = 30; 
        } 

        var days = daysDifference/noOfDays; 

        console.log(days); 

        $scope.noOfMonths = (inverse ? -1 : 1) * (yearsDifference * 12 + monthsDifference + days); // Add fractional month 

        console.log($scope.noOfMonths); 
相关问题