我们知道,在 JavaScript 中没有日期格式化的相关接口,因此使用起来很不方便
下面我们自己来封装一个函数,整体逻辑也很简单,就是使用正则表达式去替换
/** * 格式化日期 * @param { Date } date 待转换日期 * @param { String } pattern 格式字符串 * %y 两位数的年份表示 * %Y 四位数的年份表示 * %m 月份 * %d 天数 * %H 24 小时制小时数 * %I 12 小时制小时数 * %M 分钟数 * %S 秒数 * %a 简化的星期名称 * %A 完整的星期名称 * %b 简化的月份名称 * %B 完整的月份名称 * @param { Boolean } padding 是否要补齐 */ const formatDate = (date, pattern = '%Y-%m-%d %H:%M:%S', padding = true) => { if (!(date instanceof Date)) return '' const week = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'] const month = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'] const paddingZero = (num, cnt, flag) => { if (!flag) return num let str = num + '' let len = str.length return (cnt <= len) ? num : Array(cnt - len + 1).join('0') + str } return pattern .replace(/%y/g, paddingZero(date.getFullYear() % 100, 2, padding)) .replace(/%Y/g, paddingZero(date.getFullYear(), 4, padding)) .replace(/%m/g, paddingZero(date.getMonth() + 1, 2, padding)) .replace(/%d/g, paddingZero(date.getDate(), 2, padding)) .replace(/%H/g, paddingZero(date.getHours(), 2, padding)) .replace(/%I/g, paddingZero(date.getHours() % 12, 2, padding)) .replace(/%M/g, paddingZero(date.getMinutes(), 2, padding)) .replace(/%S/g, paddingZero(date.getSeconds(), 2, padding)) .replace(/%a/g, week[date.getDay() - 1].slice(0, 3)) .replace(/%A/g, week[date.getDay() - 1]) .replace(/%b/g, month[date.getMonth()].slice(0, 3)) .replace(/%B/g, month[date.getMonth()]) }
使用方法如下
let date = new Date() let string = formatDate(date) let GMTString = formatDate(date, '%a, %d %m %Y %H:%M:%S GMT') console.log(string) // 2020-06-11 21:18:30 console.log(GMTString) // Thu, 11 06 2020 21:18:30 GMT