/** * @name: 日期格式化 * @msg: 对 Date 的扩展,将 Date 转化为指定格式的 String * 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符 * 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字) * eg: * dateFormat(new Date(), "yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423 * dateFormat(new Date(), "yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04 * dateFormat(new Date(), "yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04 * dateFormat(new Date(), "yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04 * dateFormat(new Date(), "yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18 * * @param {*} date * @param {*} format * @return {*} */ export function dateFormat(date, format) { let iDate = null if (typeof date === 'number') { iDate = new Date(date) } else if (typeof date === 'string') { date = date.replace(/-/g, '/') if (date.indexOf('T') > -1) { const dotIndex = date.indexOf('.') date = date.substr(0, dotIndex) date = date.replace('T', ' ') date = new Date(date).getTime() } if (!isNaN(Number(date))) { date = Number(date) } iDate = new Date(date) } else if (date instanceof Date) { iDate = date } else { return false } // 时区 // let timestamp = iDate.getTime()/1000 - 8 * 60 * 60; // iDate = new Date(timestamp*1000); const o = { 'M+': iDate.getMonth() + 1, // 月份 'd+': iDate.getDate(), // 日 'h+': iDate.getHours() % 24 === 0 ? '00' : iDate.getHours() % 24, // 小时 'H+': iDate.getHours(), // 小时 'm+': iDate.getMinutes(), // 分 's+': iDate.getSeconds(), // 秒 'q+': Math.floor((iDate.getMonth() + 3) / 3), // 季度 S: iDate.getMilliseconds() // 毫秒 } if (!format) { format = 'yyyy-MM-dd hh:mm:ss' } const week = { 0: '\u65e5', 1: '\u4e00', 2: '\u4e8c', 3: '\u4e09', 4: '\u56db', 5: '\u4e94', 6: '\u516d' } if (/(y+)/.test(format)) { format = format.replace( RegExp.$1, (iDate.getFullYear() + '').substr(4 - RegExp.$1.length) ) } if (/(E+)/.test(format)) { format = format.replace( RegExp.$1, (RegExp.$1.length > 1 ? RegExp.$1.length > 2 ? '\u661f\u671f' : '\u5468' : '') + week[iDate.getDay() + ''] ) } for (const k in o) { if (new RegExp('(' + k + ')').test(format)) { format = format.replace( RegExp.$1, RegExp.$1.length === 1 ? o[k] : ('00' + o[k]).substr(('' + o[k]).length) ) } } return format } /** * @name: 获取最近多少天的日期 * @param {*} count 天数 * @param {*} type 默认(向后计算);before(向前计算) */ export function getDays(count, type) { const list = [] if (type && type === 'before') { for (let i = 0; i < count; i++) { list.unshift( dateFormat( new Date( new Date().setDate(new Date().getDate() - i) ).toLocaleDateString(), 'MM-dd' ) ) } } else { for (let i = 0; i < count; i++) { list.push( dateFormat( new Date( new Date().setDate(new Date().getDate() + i) ).toLocaleDateString(), 'MM-dd' ) ) } } return list }