JavaScript計算兩個時間相隔了 多少年多少月多少日。時分秒這裏不做考慮。git
若須要和當前時間比較,這裏提供當前時間的獲取格式化方法。我這裏是根據傳入類型輸出日期或者日期+時間,能夠明顯看出type
爲day
時,輸出日期。github
getNowDate(type){ let now = new Date() let year = now.getFullYear() let month = now.getMonth() + 1 let day = now.getDate() let hh = now.getHours() let mm = now.getMinutes() let ss = now.getSeconds() month = month < 10 ? '0'+ month : month day = day < 10 ? '0'+ day : day if(type == 'day'){ return year +'-'+ month +'-'+ day } else { return year +'-'+ month +'-'+ day + ' '+ hh + ':' + mm + ':' + ss } },
傳入兩個參數,格式如:2008-08-08segmentfault
getDiffYmdBetweenDate(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){ return 'past' } 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; } } //計算天數 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} },
返回的結果是一個對象,包含了y m d
三個屬性,可根據業務進行取用展現。post
比較時間的時候,若sDate1
爲小的時間,這裏直接返回past
。this
這裏根據業務不一樣能夠做不一樣的展現。這裏列出本身的Vue展現處理展現。spa
其中this.dataForm.hasdata
爲頁面的v-model。這樣的處理的效果是觀看直觀。.net
let now = this.getNowDate('day') let diffDate = this.getDiffYmdBetweenDate(now,this.data) let hasdata = '' if(diffDate == 'past'){ this.dataForm.hasdata = '已過時' } else { if(diffDate.y > 0){ hasdata += diffDate.y + '年' + diffDate.m + '月' } else if (diffDate.y == 0) { if(diffDate.m > 0){ hasdata += diffDate.m + '月' } } this.dataForm.hasdata = hasdata + diffDate.d + '日' }
感謝支持。若不足之處,歡迎你們指出,共勉。code
若是以爲不錯,記得點贊 ,謝謝你們 😂orm
歡迎關注 個人: 【Github】 【掘金】 【簡書】 【CSDN】 【OSCHINA】 【SF】
這裏列舉幾個js庫備查找使用,排序無心義。對象
本文章採用 知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議 進行許可。