如題,就像題目說的須要計算出時間差,雖然不太難,但這個需求常常會在項目中遇到的,我在這邊作一下整理,但願可以儘可能全的整理出來。有須要的朋友能夠作一下參考,喜歡的能夠點波贊,或者關注一下,但願能夠幫到你們。html
本文首發於個人我的blog:obkoro1.com後端
方法定義: getTime() 方法可返回距 1970 年 1 月 1 日之間的毫秒數。數組
一般咱們計算時間差都是經過獲取兩個時間數據,而後分別使用getTime()方法返回與固定的1970 年 1 月 1 日的時間差,經過對返回毫秒數的差,換算成時間單位,得出兩個時間的時間差。bash
首先你會有一串初始的時間數據,而後經過 new Date(你的時間數據),將你的數據轉成Date對象的形式。函數
var t1="2017/08/28 04:56:38"; //數據
var dateBegin = new Date(t1);//轉化爲Date對象的形式
//Mon Aug 28 2017 04:56:38 GMT+0800 (中國標準時間) 這裏就是Date對象的數據形式複製代碼
這裏的話就要注意一下後端給的時間數據格式的問題,好比下面兩種:網站
第一種:"2017/08/28 04:56:38"//這種格式不用再進行處理
第二種:"2017-08-01 18:56:38"//這種格式就要進行處理複製代碼
由於new Date()方法不能處理第二種數據,因此咱們這裏須要將第二種數據格式轉化爲第一種數據的格式。ui
var t1="2017-05-12 00:13:53";
var dateBegin = new Date(d1.replace(/-/g, "/"));//replace方法將-轉爲/複製代碼
不知道你們是什麼狀況,反正由於咱們後端給個人數據就是第二種的,因此我會提一下這個東西(捂臉)。spa
既然是時間差的話,就確定要有兩個數據,否則怎麼兩相比較,通常兩個數據中都會有一個當前時間的數據。.net
var dateEnd = new Date();//當前時間數據複製代碼
先獲取之間的毫秒差,經過毫秒差換算出你所須要的時間單位,而後時間單位之間的換算根據的是他們的倍數關係。3d
function timeFn(d1) {//di做爲一個變量傳進來
//若是時間格式是正確的,那下面這一步轉化時間格式就能夠不用了
var dateBegin = new Date(d1.replace(/-/g, "/"));//將-轉化爲/,使用new Date
var dateEnd = new Date();//獲取當前時間
var dateDiff = dateEnd.getTime() - dateBegin.getTime();//時間差的毫秒數
var dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//計算出相差天數
var leave1=dateDiff%(24*3600*1000) //計算天數後剩餘的毫秒數
var hours=Math.floor(leave1/(3600*1000))//計算出小時數
//計算相差分鐘數
var leave2=leave1%(3600*1000) //計算小時數後剩餘的毫秒數
var minutes=Math.floor(leave2/(60*1000))//計算相差分鐘數
//計算相差秒數
var leave3=leave2%(60*1000) //計算分鐘數後剩餘的毫秒數
var seconds=Math.round(leave3/1000)
console.log(" 相差 "+dayDiff+"天 "+hours+"小時 "+minutes+" 分鐘"+seconds+" 秒")
console.log(dateDiff+"時間差的毫秒數",dayDiff+"計算出相差天數",leave1+"計算天數後剩餘的毫秒數"
,hours+"計算出小時數",minutes+"計算相差分鐘數",seconds+"計算相差秒數");
}
var t3="2017-08-18 04:56:38";
timeFn(t3);複製代碼
//這裏的dayDiff就是上文計算出的天數差
let monthDiff=Math.floor(dayDiff/30);//以30天爲一個月不夠精準嚴謹
//獲取相差的月份
if (monthDiff<12){
timeThis=monthDiff+"個月前發佈";//獲取相差的月份
return
}
let yearDiff=Math.floor(monthDiff/12);//獲取相差的年份
if(yearDiff>=1){
timeThis=yearDiff+"年前發佈";
return
}複製代碼
當天數相差較大的時候,單純計算天數已經不能知足需求了,由於咱們PM說的統一以30天爲一個月的分界線,而後這裏月份的計算狀況感受很複雜的樣子沒有繼續研究下去。
function getDays() {
//構造當前日期對象
var date = new Date();
var year = date.getFullYear();//獲取年份
var mouth = date.getMonth() + 1;//獲取當前月份
var days;//定義當月的天數;
if (mouth == 2) {//當月份爲二月時,根據閏年仍是非閏年判斷天數
days = year % 4 == 0 ? 29 : 28;
}
else if (mouth == 1 || mouth == 3 || mouth == 5 || mouth == 7 || mouth == 8 || mouth == 10 || mouth == 12) {
//月份爲:1,3,5,7,8,10,12 時,爲大月.則天數爲31;
days = 31;
}
else {
//其餘月份,天數爲:30.
days = 30;
}
return days;
}複製代碼
網上找了個獲取當前月份天數的函數,上面的註釋也足夠全,我就一塊兒貼上來,鏈接在下面。
上面就是本文計算時間差的內容了,但願看完本文能給你們一點幫助。最後一個提示:通常須要處理的數據不會只有一兩個,極可能會給一個數組,你須要處理每一個數組元素的時間數據,這時候建議用forEach()函數遍歷整個數組。
最後:如需轉載,請放上原文連接並署名。碼字不易,感謝支持!本人寫文章本着交流記錄的心態,寫的很差之處,不撕逼,可是歡迎指點。而後就是但願看完的朋友點個喜歡,也能夠關注一下我。
blog網站 and 掘金我的主頁
以上2017.10.15