Javascript 如何计算两个日期之间的时间段-angularjs

Javascript 如何计算两个日期之间的时间段-angularjs,javascript,angularjs,date,Javascript,Angularjs,Date,我想计算两个日期之间的确切月份和天数 如果我的开始日期为“2014年1月12日”,结束日期为“2017年3月27日” 我应该得到“38个月15天” 但我只能找到开始日期和结束日期之间的天数。我需要一些帮助来找到开始日期和结束日期之间的月份和天数 然后我需要将15天除以月末的天数 有人能帮我吗?我是最新的功能 var date = new Date(); console.log("date: "+date); var currentDate = $f

我想计算两个日期之间的确切月份和天数

如果我的开始日期为“2014年1月12日”,结束日期为“2017年3月27日”

我应该得到“38个月15天”

但我只能找到开始日期和结束日期之间的天数。我需要一些帮助来找到开始日期和结束日期之间的月份和天数

然后我需要将15天除以月末的天数

有人能帮我吗?我是最新的功能

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

            $scope.userdob = "2017-01-29";
            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]);

// We use the getTime() method and get the unixtime (in milliseconds, but we want seconds, therefore we divide it through 1000)
var date1_unixtime = parseInt(date1.getTime() / 1000);
var date2_unixtime = parseInt(date2.getTime() / 1000);

// This is the calculated difference in seconds
var timeDifference = date2_unixtime - date1_unixtime;

// in Hours
var timeDifferenceInHours = timeDifference / 60 / 60;

// and finaly, in days :)
$scope.timeDifferenceInDays = timeDifferenceInHours  / 24;
            console.log("timeDifferenceInDays: "+$scope.timeDifferenceInDays);

也许我把它理解错了,但不应该是这样吗

var diffMonths = date2.getMonth() - date1.getMonth();
var diffDays = date2.getDate() - date1.getDate();
var diffYears = date2.getYear() - date1.getYear();
    diffMonths += 12* diffYears

if(diffDays<0){
       diffMonths -= 1;
       var daysInMonth = new Date(date2.getYear(), date2.getMonth()-1, 0).getDate();
       diffDays = daysInMonth + diffDays;
}
console.log('The difference between the two dates is ' + diffMonths + ' months and ' + diffDays + ' days');
var diffMonths=date2.getMonth()-date1.getMonth();
var diffDays=date2.getDate()-date1.getDate();
var diffYears=date2.getYear()-date1.getYear();
diffMonths+=12*diffyear

如果(diffDays也许我对它的理解是错误的,但它不应该是错误的吗

var diffMonths = date2.getMonth() - date1.getMonth();
var diffDays = date2.getDate() - date1.getDate();
var diffYears = date2.getYear() - date1.getYear();
    diffMonths += 12* diffYears

if(diffDays<0){
       diffMonths -= 1;
       var daysInMonth = new Date(date2.getYear(), date2.getMonth()-1, 0).getDate();
       diffDays = daysInMonth + diffDays;
}
console.log('The difference between the two dates is ' + diffMonths + ' months and ' + diffDays + ' days');
var diffMonths=date2.getMonth()-date1.getMonth();
var diffDays=date2.getDate()-date1.getDate();
var diffYears=date2.getYear()-date1.getYear();
diffMonths+=12*diffyear
如果(diffDays尝试以下方法:

function monthCalculator(){
var d1=新日期();
var d2=新日期('2013','02',12);
var years=d1.getFullYear()-d2.getFullYear();
var months=d1.getMonth()-d2.getMonth();
var totalMonths=(年*12)+个月;
变量d1Date=d1.getDate();
var d2Date=d2.getDate();
var天数=d1日期-d2日期;
var d1LastDate=null;
var d2LastDate=null;
如果(天数<0){
变量d1LastDate=新日期(d1.getFullYear(),d1.getMonth()+1,0.getDate();
var d2LastDate=新日期(d2.getFullYear(),d2.getMonth()+1,0.getDate();
如果(d1Date!=d1LastDate | | d2Date!=d2LastDate){
总月数-=1;
天=(新日期(d2.getFullYear(),d2.getMonth()+1,0.getDate())+天;
}否则{
天数=0;
}
}
控制台日志(总月数);
返回月数;
}
试试这个:

function monthCalculator(){
var d1=新日期();
var d2=新日期('2013','02',12);
var years=d1.getFullYear()-d2.getFullYear();
var months=d1.getMonth()-d2.getMonth();
var totalMonths=(年*12)+个月;
变量d1Date=d1.getDate();
var d2Date=d2.getDate();
var天数=d1日期-d2日期;
var d1LastDate=null;
var d2LastDate=null;
如果(天数<0){
变量d1LastDate=新日期(d1.getFullYear(),d1.getMonth()+1,0.getDate();
var d2LastDate=新日期(d2.getFullYear(),d2.getMonth()+1,0.getDate();
如果(d1Date!=d1LastDate | | d2Date!=d2LastDate){
总月数-=1;
天=(新日期(d2.getFullYear(),d2.getMonth()+1,0.getDate())+天;
}否则{
天数=0;
}
}
控制台日志(总月数);
返回月数;

}
为什么不使用像矩.JS这样的现有库?不同于秒、分钟和小时;月和日没有固定的比率。一个月可以是从
28
31
天的任何时间。当你要以月为单位度量事物时,可能不需要包括天。为什么不使用像矩.JS这样的现有库?不同于秒,分钟和小时;月和日没有固定的比率。一个月可以是从
28
31
天的任何时间。当你要用月来衡量事情时,也许你不需要包括天。非常感谢。2017年1月31日到2017年2月28日,这会返回0个月,不是应该返回1个月吗?同样,对于2017年5月31日到6月30日D月底结束时的数字比结束月份小。@ RobG,是的,你是对的,我没有考虑这个情况。谢谢你指出的情况。查看最新的答案。非常感谢。31月2017日至28日2月2017日,这个月返回0个月,它不应该返回1吗?同样地,在5月31日到6月30日,无论在哪里开始月的结束比月底结束的数字要少。@ RobG,是的,你是对的,我没有考虑过这个情况。谢谢你指出的情况。查看最新的答案。非常感谢。非常感谢。