首页 > 其他分享 >格式化日期

格式化日期

时间:2023-02-28 14:24:16浏览次数:30  
标签:格式化 retDate fmt Date 日期 diff date RegExp

/**
 * @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)
}

 

标签:格式化,retDate,fmt,Date,日期,diff,date,RegExp
From: https://www.cnblogs.com/cdyun/p/17164079.html

相关文章

  • WPF中任意Object的XAML代码格式化输出
    有时候,我们需要将WPF中的控件自身的XAML代码输出成文本,那么,我们可以使用System.Windows.Markup.XamlWriter.Save()方法来完成此任务。关于XamlWriter.Save()的示例,我曾经......
  • oracle报错:ORA-01839: date not valid for month specified(指定月份的日期无效)
    场景日期值存的是10位字符串,如2020-02-01,sql筛选时需要选1年以内的。select*fromt_userwhereto_date(app_date,'yyyy-MM-dd')>sysdate-360查看日志发现报错:ORA-01839......
  • AntDesign日期范围选择(可复用代码片段)
    <template><div><a-range-pickerformat='YYYY-MM-DD'@change='onUpdateChange':default=value='[dataParams.updatedTime_begin,dataParams.updateTi......
  • mysql生成随机日期
    生成一天内随机时间selectsec_to_time(rand()*86400);生成一天内随机时间,floor取整秒selectsec_to_time(floor(rand()*86400));生成00:00:00到01:00:00之......
  • 夏至日计算公式及“三伏”的日期算法问题
    今天是6月21日,农历夏至日,这一天为一年中白天最长,晚上最短。夏至日为二十四节气中最早确定下来的农历节气,为每年公历的6月20日、21、22日中的一天。用程序如何快速计算出来呢......
  • Java日期工具类编写
    Java日期工具类编写将字符串转换为对应日期 Date date = simpleDateFormat.parse(string);  将日期转换为字符串String string = simpleDateFormat.format(date);......
  • JS日期时间增加减少
    new Date().add(Date.MONTH, +3).format('Y-m-d')  // 加三个月  new Date().add(Date.MONTH, -3).format('Y-m-d')  // 减三个月    new Date().add......
  • 【转载】vsCode JS代码格式化插件ESlint
    验证有效,Ctrl+S保存代码全格式化了。写这个主要是个人笔记,算不得重复造。转载自:https://blog.csdn.net/qq_34803821/article/details/849727811、安装插件VSCode中打开......
  • go结构体打印格式化成json
    需要用到json.MarshalIndent方法官方的注释是:MarshalIndent类似于Marshal,但应用Indent来格式化输出。输出中的每个JSON元素都将以一个新行开始,该新行以前缀开头,后跟......
  • idea代码格式化快捷键设置
    idea默认格式化快捷键是:Ctrl+Alt+L,有时会因其它软件快捷键的冲突导致失灵1.File->Settings2.Keymap->MainMenu->Code3.CodeFormattingActions->ReformatC......