1. 程式人生 > >JS對時間格式的處理彙總

JS對時間格式的處理彙總

在專案實踐中,尤其是後臺的專案,經常遇到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