这段代码中的逻辑怎么了?

时间:2011-06-27 10:36:18

标签: javascript

例如,它应该返回的实际年龄是47 ...使用此代码它返回我48.我正在以正确的方式应用逻辑并计算days, months and year.中的年龄

3 个答案:

答案 0 :(得分:2)

假设12个月30天是一年 - 这是最错误的(360天,而事实上1年平均接近365.25天)。

您应该做的是分别计算每个细分:

var now = new Date();
var years = now.getFullYear()-formattedDate.getFullYear();
var months = now.getMonth()-formattedDate.getMonth();
var days = now.getDate()-formattedDate.getDate();

if (months < 0) {
    months += 12;
    years -= 1;
}

if (days < 0) {
    months -= 1;
    // now days here is a little trickier - we need the number of days in last month
    now.setTime(now.getTime() - now.getDate()*24*60*60*1000);
    days += now.getDate(); // <-- now is last day of last month now, so we know how many days there were and add this number
}

答案 1 :(得分:1)

首先看一年是365,25天,而不是30 * 12 = 360(至少在格里高利历中)

答案 2 :(得分:1)

google: date diff js将有助于举例。

注意:

  • 几个月没有30天!
  • 由于DST,天数(在某些应用程序中)也没有24小时。惊喜!

P.S。 ExtJS里面有很好的日期处理工具。