2013-11-27 163 views
1

如何计算两天之间的差额,告诉我余下的剩余月份和剩余天数?如何计算Javascript中两个日期之间的年,月和日差异?

举例: 来源:2013年10月1日 为:2013年11月15日

输出:1个月和15天

我试过momentjs但它显示了整个月,天,像1月,45天。 我也试过这个功能,但它显示了同样的事情:

var diff = Math.floor(end_date.getTime() - start_date.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 = days + " days " 
message += months + " motnhs " 
+0

可能重复[我如何在JavaScript中两个日期之间的差异?](http://stackoverflow.com/questions/41948/how-do-i-get-在JavaScript中的两个日期之间的差异) –

+0

似乎它是做你想做的?你期望的输出是什么? – theoutlander

+0

这里是另一个有趣的答案,可能有所帮助 - http://stackoverflow.com/questions/8942895/convert-a-number-of-days-to-days-months-and-years-with-jquery –

回答

0

你必须做一些估计(一个月31天,一年365天,等等),你必须减去数你”你一直在使用从diff已经使用。

var diff = Math.floor(end_date.getTime() - start_date.getTime()); 
var 
    lengthOfDayInSeconds = 1000* 60 * 60 * 24, 
    lengthOfMonthInSeconds = lengthOfDayInSeconds*31, 
    lengthOfYearInSeconds = lengthOfDayInSeconds*365; 

var yearsBetween = Math.floor(diff/lengthOfYearInSeconds); 
diff -= yearsBetween*lengthOfYearInSeconds; 

var monthsBetween = Math.floor(diff/lengthOfMonthInSeconds); 
diff -= monthsBetween*lengthOfMonthInSeconds; 

var daysBetween = Math.floor(diff/lengthOfDayInSeconds); 

message = yearsBetween + ' years '+ monthsBetween + ' months ' + daysBetween + ' days'; 

1/1/20007/16/2001之间的区别是,通过这个代码:1 years 6 months 16 days

+0

它的工作原理,但在某些月份,一天的计算可能是错误的,因为一些月份有30天,其他31天和二十八天 – antonioj1015

0

来到这里的答案: Convert a number (of days) to days, months and years with jQuery

有了这个功能:

function humanise(total_days) 
{ 
    //var total_days = 1001; 
    var date_current = new Date(); 
    var utime_target = date_current.getTime() + total_days*86400*1000; 
    var date_target = new Date(utime_target); 

    var diff_year = parseInt(date_target.getUTCFullYear() - date_current.getUTCFullYear()); 
    var diff_month = parseInt(date_target.getUTCMonth() - date_current.getUTCMonth()); 
    var diff_day = parseInt(date_target.getUTCDate() - date_current.getUTCDate()); 

    var days_in_month = [31, (date_target.getUTCFullYear()%4?29:28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]; 
    var date_string = ""; 
    while(true) 
    { 
     date_string = ""; 
     date_string += (diff_year>0?diff_year + "Y":""); 

     if(diff_month<0){diff_year -= 1; diff_month += 12; continue;} 
     date_string += (diff_month>0?diff_month + "M":""); 

     if(diff_day<0){diff_month -= 1; diff_day += days_in_month[((11+date_target.getUTCMonth())%12)]; continue;} 
     date_string += (diff_day>0?diff_day + "D":""); 
     break; 
    } 
    return date_string; 
} 
0

我使用这样才能获得价值。 modification from this link

function get_number_of_days(firstDate, secondDate) { 
    var diff_year = parseInt(secondDate.getFullYear() - firstDate.getFullYear()); 
    var diff_month = parseInt(secondDate.getMonth() - firstDate.getMonth()); 
    var diff_day = parseInt(secondDate.getDate() - firstDate.getDate()); 

    var hash_date = {}; 

    while(true) { 
    hash_date = {}; 
    hash_date["y"] = diff_year; 

    if(diff_month < 0) { 
     diff_year -= 1; 
     diff_month += 12; 
     continue; 
    } 
    hash_date["m"] = diff_month; 

    if(diff_day < 0) { 
     diff_month -= 1; 
     diff_day += get_month_length(secondDate.getFullYear(), secondDate.getMonth()); 
     continue; 
    } 
    hash_date["d"] = diff_day; 
    break; 
    } 

    return hash_date; 
} 

function get_month_length(year, month) { 
    var hour = 1000 * 60 * 60; 
    var day = hour * 24; 
    var this_month = new Date(year, month, 1); 
    var next_month = new Date(year, month + 1, 1); 
    var length = Math.ceil((next_month.getTime() - this_month.getTime() - hour)/day); 

    return length; 
} 
0

几天似乎是最棘手的计算,否则它是非常直截了当的。从目标毫秒中减去当前毫秒以获得以毫秒为单位的持续时间。然后,除了天数之外,对于每个值,以年,月,小时,分钟或秒为单位,持续时间除以毫秒数。这给你的时间内的数字或年,月,小时,分钟或秒。最后,取每个值的模数。

几天后,从持续时间中减去以毫秒为单位的年数和月数,以获得剩余的毫秒数,然后将剩余的毫秒数除以一天中的毫秒数。

function countdown(targetDate) { 
 
    var nowMillis = new Date().getTime(); 
 
    var targetMillis = targetDate.getTime(); 
 
    var duration = targetMillis - nowMillis; 
 
    var years = Math.floor(duration/3.154e+10); 
 
    var durationMinusYears = duration - (years * 3.154e+10); 
 
    var months = Math.floor(duration/2.628e+9) % 12; 
 
    var durationMinusMonths = durationMinusYears - (months * 2.628e+9); 
 
    var days = Math.floor(durationMinusMonths/8.64e+7); 
 
    var hours = Math.floor(duration/3.6e+6) % 24; 
 
    var mins = Math.floor(duration/60000) % 60; 
 
    var secs = Math.floor(duration/1000) % 60; 
 

 
    return [ years, months, days, hours, mins, secs ]; 
 
} 
 

 
console.log('Count down until IE11 is no longer supported => ' + countdown(new Date(2020, 9, 13, 0, 0)));

相关问题