常見的javascript日期和時間戳互相轉化

寫在前面

前兩天寫了一篇《常見的Javascript獲取時間戳》,今天來一篇續集吧,日期和時間戳的互轉前端

預備知識

  • 知道什麼是時間戳:即距離1970年01月01日00時00分00秒的毫秒數(若是你要用到的是秒,那也行,單位問題而已)。
  • 知道爲何須要把日期轉化成時間戳:對於前端來講,接觸的到的時間可能是2018-08-08這種形式的,可是在拉取後端數據時,通常要把時間轉化成時間戳再傳過去。一樣的道理要會把時間戳轉化成咱們想要的日期格式。

時間 -> 時間戳 (2018/08/09 10:10:10 -> 1533780610000 )

一般咱們用到的時間格式分兩種2018/08/09 10:10:10或者2018-08-09 10:10:10,幸運的是js的Date對象很好的支持了這種格式的時間,一般咱們能夠經過segmentfault

new Date('2018/08/09 10:10:10').getTime()或者
new Date('2018-08-09 10:10:10').getTime()來獲取到時間戳

可是!!!!
ie對於第二種不支持
以下圖:後端

clipboard.png

所以,請採用如下的代碼函數

let time = '2018-08-09 10:10:10'
time = time.replace(/-/g, '/') // 把全部-轉化成/
let timestamp = new Date(time).getTime()

clipboard.png

時間戳 -> 時間 (1533780610000 -> 2018/08/09 10:10:10)

這裏要用到Date對象的一系列get方法,思路是先根據時間戳new一個Date對象,而後經過一系列get方法分別拿到年月日時分秒,再拼接字符串。spa

function timestampToTime (timestamp) {
    const dateObj = new Date(+timestamp) // ps, 必須是數字類型,不能是字符串, +運算符把字符串轉化爲數字,更兼容
    const year = dateObj.getFullYear() // 獲取年,
    const month = dateObj.getMonth() + 1 // 獲取月,必需要加1,由於月份是從0開始計算的
    const date = dateObj.getDate() // 獲取日,記得區分getDay()方法是獲取星期幾的。
    const hours = pad(dateObj.getHours())  // 獲取時, pad函數用來補0
    const minutes =  pad(dateObj.getMinutes()) // 獲取分
    const seconds =  pad(dateObj.getSeconds()) // 獲取秒
    return year + '-' + month + '-' + date + ' ' + hours + ':' + minutes + ':' + seconds
}

function pad(str) {
    return +str >= 10 ? str : '0' + str
}

timestampToTime(1533773345000)
timestampToTime(1533780610000)

clipboard.png

總結

有幾個小點須要注意code

  • 爲了兼容,將橫線換成斜槓(2018-08-09 10:10:10 => 2018/08/09 10:10:10)
  • 獲取月份時,要加1
  • getDate獲取日期,getDay是用來獲取是一個星期的第幾天
  • 根據需求作適當的補0,2018-8-9 08:09:05 要比 2018-8-9 8:9:5好看的多。
相關文章
相關標籤/搜索