首页 前端知识 【js】一些关于时间日期的格式化处理

【js】一些关于时间日期的格式化处理

2025-02-27 11:02:19 前端知识 前端哥 994 20 我要收藏

获取当前时间

let currentTimeStamp = new Date()
console.log(currentTimeStamp)
// Fri Jun 14 2024 09:11:32 GMT+0800 (中国标准时间)

对当前时间进行格式化处理

const date = {
    /**
     * 日期格式化
     * @param dateStr 时间戳
     * @param fmt 预期格式的字符串
     * 例子:toFormat(Date.now(), 'yyyy-MM-dd');
     * @returns 返回一个以‘2012-12-12’格式的字符串
     */
    toFormat: function (dateStr: number | string, fmt: string) {
        if (!dateStr) {
            return '';
        }
        dateStr = typeof dateStr === 'string' ? parseInt(dateStr) : dateStr;
        fmt = fmt || 'yyyy/MM/dd';
        const date = new Date(dateStr);
        const o = {
            'M+': date.getMonth() + 1, // 月份
            'd+': date.getDate(), // 日
            'h+': date.getHours(), // 小时
            'H+': date.getHours(), // 小时
            'm+': date.getMinutes(), // 分
            's+': date.getSeconds(), // 秒
            'q+': Math.floor((date.getMonth() + 3) / 3), // 季度
            S: date.getMilliseconds() // 毫秒
        };
        if (/(y+)/.test(fmt)) {
            fmt = fmt.replace(RegExp.$1, (date.getFullYear() + '').substr(4 - RegExp.$1.length));
        }
        for (const k of Object.keys(o)) {
            if (new RegExp('(' + k + ')').test(fmt)) {
                fmt = fmt.replace(
                    RegExp.$1,
                    RegExp.$1.length === 1
                        ? String(o[k as keyof typeof o])
                        : ('00' + o[k as keyof typeof o]).substr(
                              ('' + o[k as keyof typeof o]).length
                          )
                );
            }
        }
        return fmt;
    },
    toFormatTimestamp: function (str: string) {
        str = str + '';
        const timestamp = new Date(str.replace(/-/g, '/')).getTime();
        return isNaN(timestamp) ? '' : timestamp;
    },
    /**
     * 根据时间拼接后获取时间戳(方法不严谨,之后优化)
     * case1:
     * dateData ['2018/11/28','2018/11/28']
     * return  ['1543334400','1543420799']
     * case2:
     * dateData '2018/11/28'
     * return  '1543334400'
     */
    getDateTimestamp: function (dateData: string[], timeData?: string[]) {
        if (Object.prototype.toString.apply(dateData) === '[object Array]') {
            if (!dateData[0]) {
                return [];
            }
            const startTimeString = timeData && timeData[0] ? timeData[0] : '00:00:00';
            const startDate: Date = new Date(dateData[0] + ' ' + startTimeString);
            const startTime = startDate.getTime();
            let endTimeString;
            let endTime;
            if (timeData && timeData[1]) {
                endTimeString = timeData[1];
                // safari使用new Date()的时候不识别 24:00:00, 格式化为23:59:59
                endTimeString = endTimeString == '24:00' ? '23:59:59' : endTimeString + ':00';
                endTime = new Date(dateData[1] + ' ' + endTimeString).getTime() + 999;
            } else {
                endTimeString = '23:59:59';
                endTime = new Date(dateData[1] + ' ' + endTimeString).getTime() + 999;
            }

            return [startTime, endTime];
        } else {
            return [new Date(dateData + ' 00:00:00').getTime()];
        }
    }
};

export default date;

根据入参格式,对时间进行格式化处理

yyyyMM-dd hh:mm:ss

export function getCurrentDateTime(fmt) {
  let myDate = new Date()
  let yyyy = myDate.getFullYear() //获取完整的年份(4位,1970-????)
  let M = myDate.getMonth() + 1 //获取当前月份(0-11,0代表1月)
  let MM = M < 10 ? "0" + M : M //补零
  let d = myDate.getDate() //获取当前日(1-31)
  let dd = d < 10 ? "0" + d : d //补零
  let h = myDate.getHours() //获取当前小时数(0-23)
  let hh = h < 10 ? "0" + h : h //补零
  let m = myDate.getMinutes() //获取当前分钟数(0-59)
  let mm = m < 10 ? "0" + m : m //补零
  let s = myDate.getSeconds() //获取当前秒数(0-59)
  let ss = s < 10 ? "0" + s : s //补零
  let ms = myDate.getMilliseconds() //获取当前毫秒数(0-999)
  let ms3 = ms < 10 ? "00" + ms : ms < 100 ? "0" + ms : ms
  let week = myDate.getDay() //获取当前星期X(0-6,0代表星期天)
  let lomgMs = myDate.getTime() //获取当前时间(从1970.1.1开始的毫秒数)
  let weekArr = [
    "星期日",
    "星期一",
    "星期二",
    "星期三",
    "星期四",
    "星期五",
    "星期六"
  ]
  // 获取当前时间 202307170923167
  if (fmt == "yyyy-MM-dd hh:mm:ss") {
    let str = `${yyyy}-${MM}-${dd} ${hh}:${mm}:${ss}`
    return str
  } else if (fmt == "yyyy/MM/dd hh:mm:ss") {
    let str = `${yyyy}/${MM}/${dd} ${hh}:${mm}:${ss}`
    return str
  } else if (fmt == "yyyyMMddhhmmss") {
    let str = `${yyyy}${MM}${dd}${hh}${mm}${ss}${ms3}`
    return str
  } else if (fmt == "yyyy-MM-dd hh:mm:ss W") {
    let str = `${yyyy}-${MM}-${dd} ${hh}:${mm}:${ss} ${weekArr[week]}`
    return str
  }
}

const fmtStr = getCurrentDateTime(‘yyyy-MM-dd hh:mm:ss’)
console.log(fmtStr) // 2024-06-14 09:19:44

对Date的扩展,将 Date 转化为指定格式的String

let aa = (new Date()).Format(“yyyy-MM-dd hh:mm:ss.S”)
// 2006-07-02 08:09:04.423
let bb = (new Date()).Format(“yyyy-M-d h:m:s.S”)
// 2006-7-2 8:9:4.18

export function parseDate(date, fmt) {
  //
  var o = {
    "M+": date.getMonth() + 1, // 月份
    "d+": date.getDate(), // 日
    "h+": date.getHours(), // 小时
    "m+": date.getMinutes(), // 分
    "s+": date.getSeconds(), // 秒
    "q+": Math.floor((date.getMonth() + 3) / 3), // 季度
    S: date.getMilliseconds() // 毫秒
  }
  if (/(y+)/.test(fmt))
    fmt = fmt.replace(
      RegExp.$1,
      (date.getFullYear() + "").substr(4 - RegExp.$1.length)
    )
  for (var 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
}
转载请注明出处或者链接地址:https://www.qianduange.cn//article/21594.html
标签
评论
会员中心 联系我 留言建议 回顶部
复制成功!