在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js怎么計算兩個日期相隔多少年,多少月,多少天(包括平潤年 28 29 30 3

js怎么計算兩個日期相隔多少年,多少月,多少天(包括平潤年 28 29 30 31)

網(wǎng)上的都太粗暴了,沒有考慮年 和 月 求大佬指點

回答
編輯回答
冷咖啡

偶然發(fā)現(xiàn)一篇帖子,解決了問題 代碼如下

/**
 * @desc 計算年齡
 * 計算年份->計算月份->計算天數(shù)
 *
 * @date 2015-09-22
 * @author WadeYu
 */

var getDiffYmdBetweenDate = function(sDate1,sDate2){
    var fixDate = function(sDate){
        var aD = sDate.split('-');
        for(var i = 0; i < aD.length; i++){
            aD[i] = fixZero(parseInt(aD[i]));
        }
        return aD.join('-');
    };
    var fixZero = function(n){
        return n < 10 ? '0'+n : n;
    };
    var fixInt = function(a){
        for(var i = 0; i < a.length; i++){
            a[i] = parseInt(a[i]);
        }
        return a;
    };
    var getMonthDays = function(y,m){
        var aMonthDays = [0,31,28,31,30,31,30,31,31,30,31,30,31];
        if((y%400 == 0) || (y%4==0 && y%100!=0)){
            aMonthDays[2] = 29;
        }
        return aMonthDays[m];
    };
    var checkDate = function(sDate){
    };
    var y = 0;
    var m = 0;
    var d = 0;
    var sTmp;
    var aTmp;
    sDate1 = fixDate(sDate1);
    sDate2 = fixDate(sDate2);
    if(sDate1 > sDate2){
        sTmp = sDate2;
        sDate2 = sDate1;
        sDate1 = sTmp;
    }
    var aDate1 = sDate1.split('-');
        aDate1 = fixInt(aDate1);
    var aDate2 = sDate2.split('-');
        aDate2 = fixInt(aDate2);
    //計算相差的年份
    /*aTmp = [aDate1[0]+1,fixZero(aDate1[1]),fixZero(aDate1[2])];
    while(aTmp.join('-') <= sDate2){
        y++;
        aTmp[0]++;
    }*/
    y = aDate2[0] - aDate1[0];
    if( sDate2.replace(aDate2[0],'') < sDate1.replace(aDate1[0],'')){
        y = y - 1;
    }
    //計算月份
    aTmp = [aDate1[0]+y,aDate1[1],fixZero(aDate1[2])];
    while(true){
        if(aTmp[1] == 12){
            aTmp[0]++;
            aTmp[1] = 1;
        }else{
            aTmp[1]++;
        }
        if(([aTmp[0],fixZero(aTmp[1]),aTmp[2]]).join('-') <= sDate2){
            m++;
        } else {
            break;
        }
    }
    //計算天數(shù)
    aTmp = [aDate1[0]+y,aDate1[1]+m,aDate1[2]];
    if(aTmp[1] > 12){
        aTmp[0]++;
        aTmp[1] -= 12;
    }
    while(true){
        if(aTmp[2] == getMonthDays(aTmp[0],aTmp[1])){
            aTmp[1]++;
            aTmp[2] = 1;
        } else {
            aTmp[2]++;
        }
        sTmp = ([aTmp[0],fixZero(aTmp[1]),fixZero(aTmp[2])]).join('-');
        if(sTmp <= sDate2){
            d++;
        } else {
            break;
        }
    }
    return {y:y,m:m,d:d};
};

var aTest = [
    ['1984-9-17','2015-8-15'],
    ['1984-9-17','1985-9-18'],
    ['1984-9-17','1984-10-17'],
    ['1984-9-17','1984-10-10'],
];
for(var i = 0; i < aTest.length; i++){
    console.log(aTest[i][0]+':'+aTest[i][1]);
    console.log(getDiffYmdBetweenDate(aTest[i][0],aTest[i][1]));
}

代碼引用: http://www.itkeyword.com/doc/...

2017年10月21日 18:12
編輯回答
臭榴蓮

安利一下時間工具

momentjs 感覺相當好用....

2018年3月9日 00:54
編輯回答
冷眸

把兩個日期轉成時間戳,然后減一下不就好了?

2017年11月6日 14:28
編輯回答
有你在

這個東西看你這么認為了。

你是想要 1年2個月3天這種的。還是想要 一年 14個月 4天**。

這個東西沒有一個標準算法。如果你有你心中的邏輯,按邏輯一點一點寫出來。

可以發(fā)出來讓別人幫你優(yōu)化,抖機靈什么的。還能看看輸入輸出一樣不。

我的想法是年-年,然后看看時間大還是小,小的話,減去-1,大的話不動

`20180901` `20170902` 這種就是`0年`
`20180902` `20170901` 這種就是`1年`

月-月,看看時間是大是小,這個也要看時間再去處理

`20180901` `20171002` 這種就是`0年10月`
`20180801` `20171001` 這種就是`0年10月`
`20180901` `20171001` 這種就是`0年11月`
`20181001` `20171001` 這種就是`1年0月`
`20180902` `20170901` 這種就是`1年0月`

天數(shù)當然也是同樣的道理

2017年6月25日 16:29