【问题标题】:How to find exact month and days between two dates - angularjs如何找到两个日期之间的确切月份和日期 - angularjs
【发布时间】:2017-05-30 17:26:21
【问题描述】:

我想计算两个日期之间的月份和日期。然后需要计算用户在开始日期和结束日期之间支付的费用。

成本 = 10000.00; 周期性 = 3(季度);

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

需要支付的费用=((月数天数/周期数)*成本);

我试图找出两个日期之间的时差,但它对我来说不能正常工作。谁能帮帮我?

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 

【问题讨论】:

  • 月份是什么意思?整个 30 天?
  • 玩日期很痛苦,我的建议是查看momentjs 之类的内容 - 虽然这不能回答你的问题,但这个库为我节省了大量时间 :)将分解实际的日历月和闰年等

标签: javascript angularjs


【解决方案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)));
}

【讨论】:

  • 感谢您的建议。
【解决方案2】:

日期操作是出了名的棘手。有闰年、闰秒和其他各种形式的时间调整。对于一个庞大但远非详尽的列表,请查看 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');

【讨论】:

  • 感谢您的建议。
【解决方案3】:

这解决了我的问题。

$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);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-17
    相关资源
    最近更新 更多