将天数转换为年,月,日

时间:2014-10-02 10:50:48

标签: 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;

6 个答案:

答案 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;
&#13;
&#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");

Link

答案 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构造函数可以理解的格式。

Answer Reference

相关问题