我有两个日期选择器,用于计算两个日期之间的天数。目前我正在输出天数(见下面的代码),这是毫无意义的。我想以年,月,日输出该数字。我怎么能这样做?
例如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 :(得分:6)
您的计算中存在错误:
这是0个月。
如果你的意思是d / m / y那么
1 year, 1 month, and 0 day old.
你在两个日期之间说 (不包括) - look here
无论如何这里是正确的代码,其中包括每个月的实际数量 - 它有多少天! (闰年考虑):
通知:
我将其实例化为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)))
&#13;
答案 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");
答案 2 :(得分:0)
之前已多次回答:请参阅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
答案 3 :(得分:0)
要获取两个日期之间的年和月:
var dateFrom = '2017-08-10';
var dateTo ='2019-04-23';
var date1 = new Date(dateFrom);
var date2 = new Date(dateTo);
var diff=0;
var month=31;
var days=1000*60*60*24;
diff=date2-date1;
var day=(Math.floor(diff/days));
var years = (Math.floor(day/365));
var months = Math.round(day % 365)/month;
document.write(years+"year-"+months);
答案 4 :(得分:0)
Considering
1 Year => 365 Days
1 MONTH => 30 Days
1 WEEK => 7 Days
value => NUMBER OF DAYS
function parseDays (value)
{
var year, months, week, days;
year = value >= 365 ? Math.floor(value / 365) : 0;
value = year ? value - (year*365) : value;
months = value >= 30 ? Math.floor((value % 365) / 30) : 0;
value = months ? value - (months*30) : value;
week = value >= 7 ? Math.floor((value % 365) / 7) : 0;
value = week ? value - (week*7) : value;
days = value < 7 ? Math.floor((value % 365) % 7) : 0;
console.log("years = ", year);
console.log("months = ",months);
console.log("weeks = ",week);
console.log("days = ", days);
}
答案 5 :(得分:-1)
这将为您提供两个日期之间的差异,以毫秒为单位
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构造函数可以理解的格式。