1. 程式人生 > >實現簡易版的moment.js

實現簡易版的moment.js

date對象 hour getdate git .get ice ace -m mon

  github源碼地址: www.baidu.com

  作者: 易憐白

  項目中使用了時間日期的處理方法,只使用了部分方法,為了不在引入第三方的庫(moment.js),這裏自己封裝了項目中使用到的方法。

  要實現以下功能: 

new Moment()
// 返回當前的時間對象

new Moment().unix()
// 返回當前時間的秒數

Moment.unix(timestamp)
// 傳入秒數,返回傳入秒數的時間對象

new Moment().format(‘YYYY-MM-DD dd HH:mm:ss‘)
// 返回值 2017-06-22 四 19:46:14

Moment.unix(
1498132062000).format(‘YYYY-MM-DD dd HH:mm:ss‘) // 返回值 2017-06-22 四 19:46:14

 

  一、基礎代碼:

1 class Moment {
2     constructor(arg = new Date().getTime()) {
3         this.date = new Date(arg)
4     }
5 }

  arg = new Date().getTime() :這裏使用解構對arg添加默認值 

  二、實現unix方法

class Moment {
    constructor(arg = new
Date().getTime()) { this.date = new Date(arg) } // getTime()返回的是毫秒數,需要轉成秒數並取整 unix() { return Math.round(this.date.getTime() / 1000) } }

  unix方法:返回當前時間的秒數

  三、實現靜態unix方法

1 class Moment {
2     constructor(arg = new Date().getTime()) {
3         this.date = new Date(arg)
4 } 5 6 static unix(timestamp) { 7 return new Moment(timestamp * 1000) 8 } 9 }

  靜態unix方法:參數timestamp 毫秒數 返回一個Date對象

  

  四、實現format方法

class Moment {
    constructor(arg = new Date().getTime()) {
        this.date = new Date(arg)
    }

    format(formatStr) {
        const date = this.date
        const year = date.getFullYear()
        const month = date.getMonth() + 1
        const day = date.getDate()
        const week = date.getDay()
        const hour = date.getHours()
        const minute = date.getMinutes()
        const second = date.getSeconds()

        return formatStr.replace(/Y{2,4}|M{1,2}|D{1,2}|d{1,4}|H{1,2}|m{1,2}|s{1,2}/g, (match) => {
            switch (match) {
            case ‘YY‘:
                return String(year).slice(-2)
            case ‘YYY‘:
            case ‘YYYY‘:
                return String(year)
            case ‘M‘:
                return String(month)
            case ‘MM‘:
                return String(month).padStart(2, ‘0‘)
            case ‘D‘:
                return String(day)
            case ‘DD‘:
                return String(day).padStart(2, ‘0‘)
            case ‘d‘:
                return String(week)
            case ‘dd‘:
                return weeks[week]
            case ‘ddd‘:
                return ‘周‘ + weeks[week]
            case ‘dddd‘:
                return ‘星期‘ + weeks[week]
            case ‘H‘:
                return String(hour)
            case ‘HH‘:
                return String(hour).padStart(2, ‘0‘)
            case ‘m‘:
                return String(minute)
            case ‘mm‘:
                return String(minute).padStart(2, ‘0‘)
            case ‘s‘:
                return String(second)
            case ‘ss‘:
                return String(second).padStart(2, ‘0‘)
            default:
                return match
            }
        })
    }
}

實現簡易版的moment.js