将天数转换为年,月,日

我有两个日期选择器,用于计算两个日期之间的天数。 目前我正在输出天数(见下面的代码),这是毫无意义的。 我想以年,月,日输出该数字。 我怎样才能做到这一点?

例如,2014年1月1日至01/02/15 = 397天,然后成为1年,1个月,1天

var diff = endDate - startDate; dayCount = diff / ( 60 * 60 * 24 * 1000 ); // secs * mins * hours * milliseconds dayCount = Math.round( dayCount ) + this.options.countAdjust; return dayCount; 

你的计算中有一个错误:它是0个月。 如果你的意思是d / m / y那么1 year, 1 month, and 0 day old.

你说在两个日期之间 (不包括) – 看这里

无论如何这里是正确的代码,包括每月实际计数 – 它有多少天! (闰年考虑):

注意 :

我把它实例化为d / m / yyy。 随意发送正确的模式:

alert(getAge( new Date(2014,0,1),new Date(2015,0,2)))

 function getAge(date_1, date_2) { //convert to UTC var date2_UTC = new Date(Date.UTC(date_2.getUTCFullYear(), date_2.getUTCMonth(), date_2.getUTCDate())); var date1_UTC = new Date(Date.UTC(date_1.getUTCFullYear(), date_1.getUTCMonth(), date_1.getUTCDate())); var yAppendix, mAppendix, dAppendix; //-------------------------------------------------------------- var days = date2_UTC.getDate() - date1_UTC.getDate(); if (days < 0) { date2_UTC.setMonth(date2_UTC.getMonth() - 1); days += DaysInMonth(date2_UTC); } //-------------------------------------------------------------- var months = date2_UTC.getMonth() - date1_UTC.getMonth(); if (months < 0) { date2_UTC.setFullYear(date2_UTC.getFullYear() - 1); months += 12; } //-------------------------------------------------------------- var years = date2_UTC.getFullYear() - date1_UTC.getFullYear(); if (years > 1) yAppendix = " years"; else yAppendix = " year"; if (months > 1) mAppendix = " months"; else mAppendix = " month"; if (days > 1) dAppendix = " days"; else dAppendix = " day"; return years + yAppendix + ", " + months + mAppendix + ", and " + days + dAppendix + " old."; } function DaysInMonth(date2_UTC) { var monthStart = new Date(date2_UTC.getFullYear(), date2_UTC.getMonth(), 1); var monthEnd = new Date(date2_UTC.getFullYear(), date2_UTC.getMonth() + 1, 1); var monthLength = (monthEnd - monthStart) / (1000 * 60 * 60 * 24); return monthLength; } alert(getAge(new Date(2014, 0, 1), new Date(2015, 1, 1))) 

您可以使用下面显示的链接,它有更详细的说明。 JSFIDDLE详细代码是 –

 var DateDiff = { inDays: function(d1, d2) { var t2 = d2.getTime(); var t1 = d1.getTime(); return parseInt((t2-t1)/(24*3600*1000)); }, inWeeks: function(d1, d2) { var t2 = d2.getTime(); var t1 = d1.getTime(); return parseInt((t2-t1)/(24*3600*1000*7)); }, inMonths: function(d1, d2) { var d1Y = d1.getFullYear(); var d2Y = d2.getFullYear(); var d1M = d1.getMonth(); var d2M = d2.getMonth(); return (d2M+12*d2Y)-(d1M+12*d1Y); }, inYears: function(d1, d2) { return d2.getFullYear()-d1.getFullYear(); } } var d1 = new Date("01/01/14"); var d2 = new Date("01/02/15"); var months= DateDiff.inYears(d1, d2)*12 ; var month = DateDiff.inMonths(d1, d2) - months; var days = DateDiff.inYears(d1, d2)*365; var dy = DateDiff.inDays(d1, d2) - days; alert(DateDiff.inYears(d1, d2) + " Year " + month + " Month "+ dy + " Days"); 

链接

这已得到多次回答:请参阅https://stackoverflow.com/a/17733753/550198

您可以很容易地修改以下方法以满足您的目的:

 today = new Date() past = new Date(2010,05,01) // remember this is equivalent to 06 01 2010 //dates in js are counted from 0, so 05 is june function calcDate(date1,date2) { var diff = Math.floor(date1.getTime() - date2.getTime()); var day = 1000 * 60 * 60 * 24; var days = Math.floor(diff/day); var months = Math.floor(days/31); var years = Math.floor(months/12); var message = date2.toDateString(); message += " was " message += days + " days " message += months + " months " message += years + " years ago \n" return message } a = calcDate(today,past) console.log(a) // returns Tue Jun 01 2010 was 1143 days 36 months 3 years ago 

这将为您提供两个日期之间的差异,以毫秒为单位

 var diff = Math.abs(date1 - date2); 

在你的例子中,它是

 var diff = Math.abs(new Date() - compareDate); 

您需要确保compareDate是一个有效的Date对象。

这样的事可能对你有用

 var diff = Math.abs(new Date() - new Date(dateStr.replace(/-/g,'/'))); 

即将“2011-02-07 15:13:06”转换为新日期(’2011/02/07 15:13:06’),这是Date构造函数可以理解的格式。

答案参考