格式化日期

复制代码
/**
 * @desc 格式化日期
 *        date为日期格式: Date 或date字符串 Date | number | string
 *        fmt为要转化的格式,如:'yyyy-MM-dd HH:mm:ss'
 */
export const dateFormatter = (date, fmt = 'yyyy-MM-dd HH:mm:ss') => {
    if (!date) return ''
    if (typeof date === 'string') {
        const time1 = date.replace(/-/g, '/')
        date = new Date(time1)
    }
    if (typeof date === 'number') {
        date = new Date(date)
    }
    const o = {
        'M+': date.getMonth() + 1, // 月份
        'd+': date.getDate(), //
        'h+': date.getHours() % 12 === 0 ? 12 : date.getHours() % 12, // 小时
        'H+': date.getHours(), // 小时
        'm+': date.getMinutes(), //
        's+': date.getSeconds(), //
        'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
        S: date.getMilliseconds() // 毫秒
    }
    const week = {
        0: '/u65e5',
        1: '/u4e00',
        2: '/u4e8c',
        3: '/u4e09',
        4: '/u56db',
        5: '/u4e94',
        6: '/u516d'
    }
    if (/(y+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length))
    }
    if (/(E+)/.test(fmt)) {
        fmt = fmt.replace(RegExp.$1, ((RegExp.$1.length > 1) ? (RegExp.$1.length > 2 ? '/u661f/u671f' : '/u5468') : '') + week[date.getDay()])
    }
    let k
    for (k in o) {
        if (new RegExp('(' + k + ')').test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (RegExp.$1.length === 1) ? (o[k] + '') : (('00' + o[k]).substr(('' + o[k]).length)))
        }
    }
    return fmt
}

/**
 * 获取相对当前时间叠加diff(可正可负数,正表示未来某个时间,负数表示过去某个时间)
 * 并且以指定format格式返回
 * dateType: day|month|year
 * diff: Number
 * format: String
*/
export function getDiffDate(dateType = 'day', diff = 0, format = 'yyyy-MM-dd') {
    let retDate = new Date()
    switch (dateType) {
        case 'day':
            retDate.setTime(retDate.getTime() + 3600 * 1000 * 24 * diff)
            break
        case 'month':
            retDate = retDate.setMonth(retDate.getMonth() + diff)
            break
        case 'year':
            retDate = new Date(
                retDate.getFullYear() + diff,
                retDate.getMonth(),
                retDate.getDate()
            )
            break
    }
    return dateFormatter(retDate, format)
}

复制代码

 

posted @   ^柒  阅读(50)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
点击右上角即可分享
微信分享提示