/**
* 获取特定格式日期
* date: 可以为日期字符串、日期对象,不传参数默认当前系统时间
* format: 输出日期时间格式, 不传参数默认 YYYY-MM-DD HH:mm:ss 格式
* 例:
* dateUtil().format()
* // 2022-06-16 11:56:02
*
* // 不传入日期,默认以当前日期,格式化为特定格式日期
* dateUtil().format('YYYY年MM月DD日 (周W) HH时mm分ss秒')
* // 2022年06月16日 (周四) 12时01分51秒
*
* // 传入指定日期(string | date),格式化为指定格式日期(string)
* dateUtil('2015.7.12').format('YYYY年MM月DD日 HH时mm秒ss分 星期W')
* // 2015年07月12日 00时00分00秒 星期三
*/
export const dateUtil = (time = new Date()) => {
time = typeof time === 'string' ? time.replace(/-/g, '/') : time;
const date = isNaN(new Date(time)) ? time : new Date(time);
return { date, format };
function format(rule = 'YYYY-MM-DD HH:mm:ss') {
const weeks = ['日', '一', '二', '三', '四', '五', '六'];
const padStart = (d) => (d + '').padStart(2, '0');
const M = date.getMonth() + 1 + '';
const D = date.getDate() + '';
const H = date.getHours() + '';
const m = date.getMinutes() + '';
const s = date.getSeconds() + '';
return rule
.replace('YYYY', date.getFullYear())
.replace('MM', padStart(M))
.replace('M', M)
.replace('DD', padStart(D))
.replace('D', D)
.replace('HH', padStart(H))
.replace('H', H)
.replace('mm', padStart(m))
.replace('m', m)
.replace('ss', padStart(s))
.replace('s', s)
.replace(/W/, weeks[date.getDay()])
.replace(/w/, date.getDay());
}
};
/**
* 获取特定格式日期
* date: 可以为日期字符串、日期对象,不传参数默认当前系统时间
* format: 输出日期时间格式, 不传参数默认 YYYY-MM-DD HH:mm:ss 格式
* 例:
* dateUtil().format()
* // 2022-06-16 11:56:02
*
* // 不传入日期,默认以当前日期,格式化为特定格式日期
* dateUtil().format('YYYY年MM月DD日 (周W) HH时mm分ss秒')
* // 2022年06月16日 (周四) 12时01分51秒
*
* // 传入指定日期(string | date),格式化为指定格式日期(string)
* dateUtil('2015.7.12').format('YYYY年MM月DD日 HH时mm秒ss分 星期W')
* // 2015年07月12日 00时00分00秒 星期三
*/
function dateUtil (time = new Date()) {
time = typeof time === 'string' ? time.replace(/-/g, '/') : time;
const date = isNaN(new Date(time)) ? time : new Date(time);
const format = (rule = 'YYYY-MM-DD HH:mm:ss') => {
const weeks = ['日', '一', '二', '三', '四', '五', '六'];
const pad = (d, r) => (d + '').padStart(r.length, '0');
const dates = {
Y: date.getFullYear(),
M: date.getMonth() + 1,
D: date.getDate(),
H: date.getHours(),
m: date.getMinutes(),
s: date.getSeconds(),
W: weeks[date.getDay()],
w: date.getDay(),
}
const types = ['YYYY', 'MM', 'M', 'DD', 'D', 'HH', 'H', 'mm', 'm', 'ss', 's', 'W', 'w']
return types.reduce((t, v) => t.replace(v, pad(dates[v[0]], v)), rule)
}
return { date, format };
};
console.log(dateUtil().format('YYYY年M月DD日 H:mm:s 星期W 周w'))