JS對時間格式的處理彙總
阿新 • • 發佈:2018-12-03
在專案實踐中,尤其是後臺的專案,經常遇到input框中的時間字串和時間戳,又或者前後兩個時間對比大小,或者設定固定相差多少天進行搜尋的功能等實際問題。
往往在網上搜到問題的解決方法,用過去了,以後再用,就又忘了,或者記得不全,減低了開發效率。因此,在這裡做一個專題的筆記整理,方便以後快速查詢。
1、時間字串轉換成時間戳
var a = new Date('2017-11-11 11:11:11')
var c = a.getTime();
console.log(a)
console.log(c)
結果:
a => Sat Nov 11 2017 11:11:11 GMT+0800 (ä¸å½æ åæ¶é´) c => 1510369871000
上邊的程式碼,是模擬一個input框中獲取到的時間(字串形式)資料,向時間戳的轉換過程。首先,通過使用時間建構函式,將時間(字串形式)轉換成標準的時間格式,然後通過Date物件的getTime()方法轉化成時間戳(注意:此時的時間戳是毫秒級的),也可以使用valueOf()的方法轉換,結果是相同的,也可以使用Date.parse()的方法轉換,結果唯一的不同是毫秒級的後三位直接是000,而不是具體資料的具體毫秒值。根據資料的需求,使用毫秒級的或者再在此基礎上除以1000,獲得秒級時間戳。
var d = c / 1000; console.log(d); d => 1510369871 Math.round(d) => 1510369871
如果為了資料的嚴謹性,在獲得秒級資料的時候,還要追加Math.round()方法,取整使用該資料。
2、時間戳轉換為時間字串
var a = new Date(1510369871000)
console.log(a)
a => Sat Nov 11 2017 11:11:11 GMT+0800 (ä¸å½æ åæ¶é´)
時間戳向時間字串的轉換,需要先將時間戳資料轉換為毫秒級的,然後使用建構函式將時間戳轉換為標準時間格式,隨後根據需求使用toUTCString()、toLocaleString() 三種方法,將時間轉換成年月日的格式。
var c = a.toLocaleString(); console.log(c) c => 2017年11月11日 11:11:11 var c = a.toUTCString(); console.log(c) c => Sat, 11 Nov 2017 03:11:11 GMT
如果需要特殊的格式(例如:YYYY-MM-DD hh:mm:ss),通常情況下,我們使用正則表示式來輔助對資料進行轉換。
var d = c.replace(/年|月/g, "-").replace(/日/g, " ");
console.log(c)
console.log(d)
c => 2017年11月11日 11:11:11
d => 2017-11-11 11:11:11
這是比較簡便的方法,如果專案需求不是這樣,也可是使用Date物件的其他方法,單獨獲取相應的年、月、日、小時、分鐘、秒等資料。
function formatDate(now) {
var year=now.getYear();
var month=now.getMonth()+1;
var date=now.getDate();
var hour=now.getHours();
var minute=now.getMinutes();
var second=now.getSeconds();
return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second;
}
3、兩個時間戳之間的計算換算成具體的年月日
在個別的專案中,由於展示的需求,通常需要將返回的時間字串或者時間戳進行對比後,計算差值,再轉換成具體的年月日的間隔進行展示。以下程式碼源自網路上查到的方法,覺得不錯,再次進行追加收藏一下,已備不是之需:const a = '2017-12-11 08:11:30';
const b = '2018-12-15 20:18:42';
const start = new Date(a).getTime();
let end = new Date(b).getTime();
let runTime = (end - start)/1000;
const year = Math.floor(runTime / 86400 / 365);
runTime = runTime % (86400 * 365);
const month = Math.floor(runTime / 86400 / 30);
runTime = runTime % (86400 * 30);
const day = Math.floor(runTime / 86400);
runTime = runTime % 86400;
const hour = Math.floor(runTime / 3600);
runTime = runTime % 3600;
const minute = Math.floor(runTime / 60);
runTime = runTime % 60;
const second = runTime;
console.log(year,month,day,hour,minute,second);
>> 1 0 4 12 7 12