将天数转换为年,月,日

Rob*_*Rob 6 javascript jquery

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

例如,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;
Run Code Online (Sandbox Code Playgroud)

Roy*_*mir 8

你的计算中有一个错误:它是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)))
Run Code Online (Sandbox Code Playgroud)

  • 请注意,“转换为 UTC”表达式具有误导性。ECMAScript 日期 ** 是** UTC,无需转换。该表达式等效于`date2.setUTCHours(0,0,0,0)`。*DaysInMonth* 函数过于复杂([*获取指定月份的天数*](http://stackoverflow.com/questions/315760/what-is-the-best-way-to-determine-the-number -of-days-in-a-month-with-javascript))。 (2认同)