Преобразовать количество дней в годы, месяцы, дни

javascript jquery

12227 просмотра

5 ответа

1922 Репутация автора

У меня есть два средства выбора даты, которые вычисляют количество дней между двумя датами. На данный момент я вывожу количество дней (см. Код ниже), которое бессмысленно. Я хочу вывести это число в годах, месяцах, днях. Как я могу это сделать?

Например, с 01.01.14 по 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;
Автор: Rob Источник Размещён: 02.10.2014 10:50

Ответы (5)


0 плюса

4432 Репутация автора

На этот вопрос отвечали несколько раз: смотрите 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
Автор: Seany84 Размещён: 02.10.2014 10:54

1 плюс

6630 Репутация автора

Вы можете использовать ссылку, показанную ниже, она имеет более подробное объяснение. 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");

Ссылка

Автор: Arindam Nayak Размещён: 02.10.2014 10:54

-1 плюса

1010 Репутация автора

Это даст вам разницу между двумя датами, в миллисекундах

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.

Ответ Ссылка

Автор: Fahad Hussain Размещён: 02.10.2014 11:05

8 плюса

80903 Репутация автора

Решение

У вас есть ошибка в ваших расчетах: это 0 месяцев. И если вы имеете в виду д / м / у, то 1 year, 1 month, and 0 day old.

Вы сказали, что между двумя датами (не включая) - смотрите здесь

В любом случае, вот правильный код, который включает в себя каждый месяц - сколько у него дней! (рассмотрение високосного года):

уведомление:

Я создал его как д / м / гггг. не стесняйтесь отправить правильный шаблон в:

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

Автор: Royi Namir Размещён: 02.10.2014 11:10

0 плюса

1 Репутация автора

Если вы хотите получить год и месяц между двумя датами:

     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);
Автор: Ajay Kumar Gupta Размещён: 24.04.2019 07:01
Вопросы из категории :
32x32