計算時間差原理:
getTime()方法
方法定義: getTime() 方法可返回距 1970 年 1 月 1 日之間的毫秒數。
通常我們計算時間差都是通過獲取兩個時間數據,然后分別使用getTime()方法返回與固定的1970 年 1 月 1 日的時間差,通過對返回毫秒數的差,換算成時間單位,得出兩個時間的時間差。
開始操作:
首先你會有一串初始的時間數據,然后通過 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()方法不能處理第二種數據,所以我們這里需要將第二種數據格式轉化為第一種數據的格式。
let t1="2017-05-12 00:13:53"; let dateBegin = new Date(d1.replace(/-/g, "/"));//replace方法將-轉為/
另一個時間數據:
既然是時間差的話,就肯定要有兩個數據,不然怎么兩相比較,一般兩個數據中都會有一個當前時間的數據。
let dateEnd = new Date();//當前時間數據
完整計算時間差(天、小時、分鍾、秒)的代碼:
先獲取之間的毫秒差,通過毫秒差換算出你所需要的時間單位,然后時間單位之間的換算根據的是他們的倍數關系。
function timeFn(d1) {//di作為一個變量傳進來 //如果時間格式是正確的,那下面這一步轉化時間格式就可以不用了
let dateBegin = new Date(d1.replace(/-/g, "/"));//將-轉化為/,使用new Date
let dateEnd = new Date();//獲取當前時間
let dateDiff = dateEnd.getTime() - dateBegin.getTime();//時間差的毫秒數
let dayDiff = Math.floor(dateDiff / (24 * 3600 * 1000));//計算出相差天數
let leave1=dateDiff%(24*3600*1000) //計算天數后剩余的毫秒數
let hours=Math.floor(leave1/(3600*1000))//計算出小時數 //計算相差分鍾數
let leave2=leave1%(3600*1000) //計算小時數后剩余的毫秒數
let minutes=Math.floor(leave2/(60*1000))//計算相差分鍾數 //計算相差秒數
let leave3=leave2%(60*1000) //計算分鍾數后剩余的毫秒數
let seconds=Math.round(leave3/1000) console.log(" 相差 "+dayDiff+"天 "+hours+"小時 "+minutes+" 分鍾"+seconds+" 秒") console.log(dateDiff+"時間差的毫秒數",dayDiff+"計算出相差天數",leave1+"計算天數后剩余的毫秒數" ,hours+"計算出小時數",minutes+"計算相差分鍾數",seconds+"計算相差秒數"); } let 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; }
