最近开始写前端 在前端对于日期的操作记录一下 PS:发现现在网络太多垃圾文章浪费时间
js采用unix时间戳分为13位精确到毫秒 1970年1月1日UTC的毫秒数 点击进官网
js没有可以直接格式化的函数 故整理手写函数使用
java日期格式化new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
sql日期格式化DATE_FORMAT(NOW(),'%Y %m %d %H:%i %s')
把字符串转换成13位的时间戳 再转换成日期 对日期进行格式化 且不满10的对其补'0'
function dateFormat(date, pattern = 'yyyy-mm-dd hh:mm:ss') { // 形参默认值
if (typeof (date) == "string") { // 把字符串转换成时间戳
// '2019-05-01T15:30:00' 去除'T' 把'-'转为'/'防止不兼容'-'的平台
date = date.replace("T", " ").replace(/-/g, '/');
if (date.toString().length == 10) { // 把10位的时间戳转换为13位
// 精确到秒 毫秒值为000 可直接对日期字符串操作
date = Date.parse(date) * 1000;
// 精确到毫秒 但要先把日期字符串转为日期
// date = new Date(date).getTime() * 1000;;
// 精确到毫秒 但要先把日期字符串转为日期 直接对字符串操作还是得到字符串
// date = new Date(date).valueOf() * 1000;
}
// 判断成功说明传入的参数不正确 不可转换为日期
if (date.toString().length != 13) return '';
}
// Date的构造方法可直接传入日期字符串或时间戳或日期 并生成日期
var formatdate = new Date(date);
// var formatdate = new Date(); // 对当前日期进行处理
var y = formatdate.getFullYear();
// 月份从0开始 获取正确月份需+1 padStart(2,'0')函数 不是二位的字符串则在前加字符串'0'
var M = (formatdate.getMonth() + 1).toString().padStart(2,'0');
var d = formatdate.getDate().toString().padStart(2,'0'); // 日
var H = formatdate.getHours().toString().padStart(2,'0'); // 小时
var m = formatdate.getMinutes().toString().padStart(2,'0'); // 分
var s = formatdate.getSeconds().toString().padStart(2,'0'); // 秒
// 字符串拼接方式
// return y + '-' + M + '-' + d + ' ' + H + ' ' + m + ' ' + s;
// 高级一点的字符串拼接方式
// return [y, M, d].join('-') + ' ' + [H, m, s].join(':');
pattern = pattern.toLowerCase(); // 把pattern转为小写
// 此处需要格式话多个格式 再次加判断即可
if (pattern == 'yyyy-mm-dd') {
return `${y}-${M}-${d}`; // es6语法了解一下
} else if (pattern == 'yyyy-mm-dd hh:mm:ss') {
return `${y}-${M}-${d} ${H}:${m}:${s}`;
}
}