鍍金池/ 問答/HTML/ js如何計(jì)算兩個(gè)日期,差幾個(gè)月零幾天?

js如何計(jì)算兩個(gè)日期,差幾個(gè)月零幾天?

如果這樣寫的話,會(huì)出現(xiàn)負(fù)數(shù)24個(gè)月,-1天啊

function monthDayDiff(startDate,endDate){

 start = new Date(startDate);
let end = new Date(endDate);
    end.setDate(end.getDate()+1);
let year=end.getFullYear()-start.getFullYear();
let month=end.getMonth()-start.getMonth();
let day=end.getDate()-start.getDate();
let data = new Array(12*year+month,day) ;
return data;

}

console.log(monthDayDiff('2017-3-3','2019-3-1'));

回答
編輯回答
局外人

你這個(gè)問題不大嚴(yán)謹(jǐn)啊。
你說的月份是自然月還是以30天為一個(gè)月?
如果是自然月就是對(duì)應(yīng)位置相減,用到Date.getFullYear(), Date.getMonth(), Date.getDate()。
如果是以30天為一個(gè)月就是轉(zhuǎn)換為時(shí)間戳然后自行計(jì)算,用到Date.getTime()

2017年2月21日 02:26
編輯回答
挽青絲

只能算天數(shù),當(dāng)然你一個(gè)月按30天計(jì)算的話,再除以30.

    var date = differencedate("2017-1-1","2017-3-3");
            console.log(date)
            function differencedate(start,end){
                var startdate = new Date(start);
                var enddate = new Date(end);
                return (enddate-startdate)/(24*60*60*1000);
            }
2018年1月9日 20:30
編輯回答
萌面人

這是我曾經(jīng)寫過的小插件,可以參考一下

<script>
var startTime = "2017-04-04";
var calculationTime = function(startTime) {
    var s1 = new Date(startTime.replace(/-/g, "/")),
    s2 = new Date(),
    runTime = parseInt((s2.getTime() - s1.getTime()) / 1000);
    var year = Math.floor(runTime / 86400 / 365);
    runTime = runTime % (86400 * 365);
    var month = Math.floor(runTime / 86400 / 30);
    runTime = runTime % (86400 * 30);
    var day = Math.floor(runTime / 86400);
    runTime = runTime % 86400;
    var hour = Math.floor(runTime / 3600);
    runTime = runTime % 3600;
    var minute = Math.floor(runTime / 60);
    runTime = runTime % 60;
    var second = runTime;
    document.querySelector(".SiteRunningTime > .year").innerText = year;
    document.querySelector(".SiteRunningTime > .month").innerText = month;
    document.querySelector(".SiteRunningTime > .day").innerText = day;
    document.querySelector(".SiteRunningTime > .hour").innerText = hour;
    document.querySelector(".SiteRunningTime > .minute").innerText = minute;
    document.querySelector(".SiteRunningTime > .second").innerText = second
};
setInterval("calculationTime(startTime)", 1000);
</script>
<span class="SiteRunningTime">該站點(diǎn)運(yùn)行了<label class="year">0</label>年<label class="month">0</label>月<label class="day">0</label>日<label class="hour">0</label>時(shí)<label class="minute">0</label>分<label class="second">0</label>秒</span>
2017年8月18日 18:55
編輯回答
尐飯團(tuán)

通過Date.parse()方法,把兩個(gè)時(shí)間都轉(zhuǎn)為時(shí)間戳(單位是毫秒),
在計(jì)算出兩個(gè)時(shí)間戳之間的差,最后再寫一個(gè)格式化時(shí)間的方法轉(zhuǎn)一下

2017年10月2日 08:55
編輯回答
互擼娃
function monthDayDiff(startDate, endDate) {
    let flag = [1, 3, 5, 7, 8, 10, 12, 4, 6, 9, 11, 2];
    let start = new Date(startDate);
    let end = new Date(endDate);
    let year = end.getFullYear() - start.getFullYear();
    let month = end.getMonth() - start.getMonth();
    let day = end.getDate() - start.getDate();
    if (month < 0) {
        year--;
        month = end.getMonth() + (12 - start.getMonth());
    }
    if (day < 0) {
        month--;
        let index = flag.findIndex((temp) => {
            return temp === start.getMonth() + 1
        });
        let monthLength;
        if (index <= 6) {
            monthLength = 31;
        } else if (index > 6 && index <= 10) {
            monthLength = 30;
        } else {
            monthLength = 28;
        }
        day = end.getDate() + (monthLength - start.getDate());
    }
    console.log(`相差${12 * year + month}月${day}天`);
}
monthDayDiff('2017-3-3', '2019-3-1');
2018年4月16日 17:43
編輯回答
淚染裳
var d1 = '2017-01-01';
var d2 = '2017-03-03';

s1 = new Date(d1.replace(/\-/g, "/"));
s2 = new Date(d2.replace(/\-/g, "/"));

var time = s2.getTime() - s1.getTime();
var days = parseInt(time / (1000 * 60 * 60 * 24));

days即為相差天數(shù)

2017年12月5日 02:30
編輯回答
旖襯
var startStr = '2017-1-1';
var endStr = '2017-3-3';
var startAry ,endAry;
startAry = startStr.split('-');
endAry = endStr.split('-');
console.log(parseInt(endAry[0]) - parseInt(startAry[0]));
console.log(parseInt(endAry[1]) - parseInt(startAry[1]));
console.log(parseInt(endAry[2]) - parseInt(startAry[2]) + 1);

天數(shù) + 1 ;ps:即加上2017-1-1這天。

let a=new Date('2017-3-3');
let b=new Date('2017-1-1');
let year=a.getFullYear()-b.getFullYear();
let month=a.getMonth()-b.getMonth();
let day=a.getDate()-b.getDate();
console.log(相差${year}年${month}月${day}天);

這個(gè)答案比我的寫的更好點(diǎn)。

2017年3月16日 22:44