javascript 将天数转换为年、月、日

lnlaulya  于 2023-01-29  发布在  Java
关注(0)|答案(6)|浏览(150)

我有两个日期选择器来计算两个日期之间的天数。现在我输出的是天数(见下面的代码),这有点无意义。我想以年、月、天的形式输出这个数字。我该怎么做呢?
例如,2014年1月1日至2015年1月2日= 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;
cxfofazt

cxfofazt1#

  • 您的计算中有一个错误:是0个月。如果你指的是d/m/y那么1 year, 1 month, and 0 day old. *

您说 * 在两个日期之间 *(不包括)-look here

    • 无论如何**这里是正确的代码,其中包括每月实际计数-它有多少天!(闰年考虑):

注意事项:
我将其示例化为d/m/yyy。请随意发送正确的模式:
alert(getAge( new Date(1978,11,22),new Date()))

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(1978, 11, 22), new Date()))
mfuanj7w

mfuanj7w2#

你可以使用下面显示的链接,它有更详细的解释。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

fbcarpbf

fbcarpbf3#

function parseDays (value) {
    const YEAR = 365, MONTH = 30, WEEK = 7;
    let year, months, week, days;
         
    year = value >= YEAR ? Math.floor(value / YEAR) : 0;
    value = year ? value - (year * YEAR) : value;
        
    months = value >= MONTH ? Math.floor((value % YEAR) / MONTH) : 0;
    value = months ? value - (months * MONTH) : value;
        
    week = value >= WEEK ? Math.floor((value % YEAR) / WEEK) : 0;
    value = week ? value - (week * WEEK) : value;
        
    days = value < WEEK ? Math.floor((value % YEAR) % WEEK) : 0;
        
    console.log(`years=${year},months=${months},weeks=${week},days=${days}`);     
}
unhi4e5o

unhi4e5o4#

这个问题以前已经回答过好几次了:参见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
ufj5ltwl

ufj5ltwl5#

当你想得到两个日期之间的年和月:

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

c0vxltue6#

这将为您提供两个日期之间的差异(以毫秒为单位

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”转换为新的Date(“2011/02/07 15:13:06”),这是Date构造函数可以理解的格式。
Answer Reference

相关问题