Convert number of days into years, months, days

后端 未结 6 650
轮回少年
轮回少年 2021-01-12 06:21

I have two date pickers that calculates the number of days there are between the two dates. At the moment I\'m outputting the number of days (see code below) which is kind o

相关标签:
6条回答
  • 2021-01-12 06:47

    You have a bug in your calculation : it's 0 month. And if you mean d/m/y then 1 year, 1 month, and 0 day old.

    you said between the two dates ( not include) - look here

    Anyway here is the right code which include actually count each month - how many days it has ! ( leap year consideration):

    notice :

    I instantiated it as d/m/yyy. feel free to send right pattern in :

    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)))

    0 讨论(0)
  • 2021-01-12 06:49

    This will give you the difference between two dates, in milliseconds

    var diff = Math.abs(date1 - date2);
    

    In your example, it'd be

    var diff = Math.abs(new Date() - compareDate);
    

    You need to make sure that compareDate is a valid Date object.

    Something like this will probably work for you

    var diff = Math.abs(new Date() - new Date(dateStr.replace(/-/g,'/')));
    

    i.e. turning "2011-02-07 15:13:06" into new Date('2011/02/07 15:13:06'), which is a format the Date constructor can comprehend.

    Answer Reference

    0 讨论(0)
  • 2021-01-12 06:59

    This has been answered several times befoore: See https://stackoverflow.com/a/17733753/550198

    You can modify the following method quite easily to suit your purposes:

    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
    
    0 讨论(0)
  • 2021-01-12 07:04
    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);     
            }
    
    0 讨论(0)
  • 2021-01-12 07:07

    When you want to get the year and month between two date:

         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);
    
    0 讨论(0)
  • 2021-01-12 07:09

    You can use link shown below , it has more detailed explanation. JSFIDDLE The detailed code is -

    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

    0 讨论(0)
提交回复
热议问题