美文网首页
使用JS将 时间戳 和 Date对象 相互转换

使用JS将 时间戳 和 Date对象 相互转换

作者: 林键燃 | 来源:发表于2018-09-28 21:18 被阅读4次

    时间戳 和 Date对象 相互转换

    将Date对象转换成时间戳

    • 使用Number()
        let newDate = new Date()
        // 返回当前时间的时间戳
        Number(newDate)
    
    • 使用Date.parse()
        let newDate = new Date()
        // 返回当前时间戳
        Date.parse(newDate)
    
    • 利用转义符进行转义
        // 使用“+”对时间对象进行转义
        let newDate = +new Date()
    

    将时间戳转换为Date对象

    • 实例化一个Date对象,并将13位的时间戳传入
        let newDate = new Date(时间戳)
    
    • 使用Date.setTime(),设置Date对象的时间为时间戳的时间
        // 时间戳
        let timestamp = 1538148600000
        // 实例一个时间戳对象
        let newDate = new Date()
        // 设置Date对象的时间为时间戳的时间
        newDate.setTime(tiemstamp)
    

    实例1:格式化时间戳

    将时间戳转换为日期,时间格式为:'yyyy-MM-dd hh:mm:ss'
    欲了解RegExp.$n的相关知识可以访问链接:$1...$9 属性 (RegExp) (JavaScript)

    /*
    * value为时间戳,fmt为时间格式('yyyy-MM-dd hh:mm:ss')
    * @param { Number | Date } value
    * @param { String } fmt
    * 格式化完成的时间
    * @return { String } fmt 
    */
    const dateFmt = (value, fmt) => {
        if(typeof value !== undefined) {
            value = new Date(value)
            const fmtObj = {
                'M+': value.getMonth() + 1, // 月份
                'd+': value.getDate(), // 日期
                'h+': value.getHours(), // 小时
                'm+': value.getMinutes(), // 分钟
                's+': value.getSeconds(), // 秒
                'q+': Math.floor((value.getMonth() + 3) / 3), //季度
                'S': value.getMilliseconds() // 毫秒
            }
            if (/(y+)/.test(fmt)) {
                // fmt = fmt.replace(Reg.Exp.$1,(value.getFullYear() + '').substr(4 - RegExp.$1.length));
                fmt = fmt.replace(/(y+)/, (value.getFullYear() + '').substr(4 - RegExp.$1.length))
            }
            for (let key in fmtObj) {
                let regExp = new RegExp('(' + key + ')')
                if (regExp.test(fmt)) {
                   //fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (fmtObj[key]) : (('00' + fmtObj[key]).substr(('' + fmtObj[key]).length)))
                   fmt = fmt.replace(regExp, (RegExp.$1.length === 1) ? fmtObj[key] : (('00' + fmtObj[key]).substr(('' + fmtObj[key]).length)))
                }
            }
            return fmt
        }
    }
    
    const fmt = "yyyy-MM-dd hh:mm:ss"
    const timestamp =  1538148600000
    const date = dateFmt(timestamp, fmt) // "2018-09-28 23:30:00"
    

    实例2:计算两个时间戳或Date对象相隔多少天

    /*
    * 计算time1和time2相隔时间,精确到‘日’
    * @param { String | Date } time1
    * @param { String | Date } time2
    * @return { Number } (time2 - time1) / (24 * 60 * 60 * 1000)
    */
    const diffDay = function (time1, time2) {
        // 如果 time1 或者 time2 不是Date对象则将其转换为Date对象
        const time1 = time1 instanceof Date ? time1 : new Date(time1)
        const time2 = time2 instanceof Date ? time2 : new Date(time2)
        
        time1.setHours(0)
        time1.setMinutes(0)
        time1.setSeconds(0)
        time1.setMilliseconds(0)
        time2.setHours(0)
        time2.setMinutes(0)
        time2.setSeconds(0)
        time2.setMilliseconds(0)
        
        /*
        *如果是负数说明 time2 比 time1 早。如 -1,则说明早了一天,即 time1 是今天,则 time2 是昨天。
        *如果是正数说明 time2 比 time1 晚。如1,则说明晚一天,即 time1 是今天,则 time2 是明天。
        */
        return (time2 - time1) / (24 * 60 * 60 * 1000)
    }
    

    实例3:将时间戳或者Date对象转换为对应的日期

    /*
    * 计算 value 的日期,返回值可能为“昨天 00:00”,“今天 00:00”,“明天 00:00”,
    * “**月**日 00:00”,“****年**月**日 00:00”,精确到分钟
    * @param { String | Date } value
    * @return { String } result
    */
    
    const moment = (value) => {
        if(typeof value !== undefined) {
            const today = new Date()
            let result = ''
            value = value instanceof Date ? value : new Date(value)
            // 调用实例2的diffDay()方法
            const diff = diffDay(today, value)
            // 设置日期
            if (diff === -1) {
                result = '昨天'
            } else if (diff === 0) {
                result = '今天'
            } else if (diff === 1) {
                result = '明天'
            } else if (Math.abs(diff) >= 365) {
                result = value.getFullYear() + '年' + (value.getMonth() + 1) + '月' + value.getDate() + '日'
            } else {
                result = (value.getMonth() + 1) + '月' + value.getDate() + '日'
            }
            // 设置小时和分钟
            let hours = value.getHours()
            let minutes = value.getMinutes()
            hours = hours >= 10 ? hours : '0' + hours
            minutes = minutes >= 10 ? minutes : '0' + minutes;
            result += ' ' + hours + ':' + minutes
            
            return result
        } else {
            return false    
        }
    }
    
    // 传入时间戳 1538148600000
    let result = moment(1538148600000) // "9月28日 23:30" 
    

    相关文章

      网友评论

          本文标题:使用JS将 时间戳 和 Date对象 相互转换

          本文链接:https://www.haomeiwen.com/subject/dyrmoftx.html