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
三個屬性,可根據業務進行取用展現。bash
比較時間的時候,若sDate1
爲小的時間,這裏直接返回past
。post
這裏根據業務不一樣能夠做不一樣的展現。這裏列出本身的Vue展現處理展現。ui
其中this.dataForm.hasdata
爲頁面的v-model。這樣的處理的效果是觀看直觀。this
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 + '日'
}
複製代碼
感謝支持。若不足之處,歡迎你們指出,共勉。spa
若是以爲不錯,記得點贊 ,謝謝你們 😂.net
這裏列舉幾個js庫備查找使用,排序無心義。
本文章採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。