分享一个工具方法:日期格式化 & 日期转化,用法与java类SimpleDateFormat类似
/** * y 年(201X) * M 年中的月份(1-12) * d 月份中的天数(1-31) * H 一天中的小时数(0-23) * h am/pm 中的小时数(1-12) * m 小时中的分钟数(0-59) * s 分钟中的秒数(0-59) * S 毫秒数(0-999) */ /** * 格式化输出日期 * eq: dateFormat(new Date(),"yyyy-MM-dd HH:mm:ss") */ export const dateFormat = (date,format) => { let reg = /[yMdHhmsS]/; let formatArr = format.match(/(.)\1*/g); let formatObj = { y:""+date.getFullYear(), M:"0"+(date.getMonth()+1), d:"0"+date.getDate(), H:"0"+date.getHours(), h:"0"+(date.getHours()>12?date.getHours()-12:(date.getHours()==0?12:date.getHours())), m:"0"+date.getMinutes(), s:"0"+date.getSeconds(), S:"00"+date.getMilliseconds() }; let str = ""; for(let i= 0,len = formatArr.length;i<len;i++){ if(formatArr[i]){ let char0 = formatArr[i].charAt(0); if(reg.test(char0)){ let charLen = formatArr[i].length; str += formatObj[char0].slice(charLen*-1); }else{ str += formatArr[i]; } } } return str; }, /** * 字符串转化为Date对象 * eq: parseDate("yyyy-MM-dd HH:mm:ss","2017-10-24 20:33:11") */ export const parseDate = (dateStr,format) => { if(dateStr.length!==format.length){ console.warn("parseDate: the length of the dateString and format is not equal"); } let reg = /[yMdHhmsS]/; let formatArr = format.match(/(.)\1*/g); let date = new Date(); let formatObj = { y:date.setFullYear, M:date.setMonth, d:date.setDate, H:date.setHours, h:date.setHours, m:date.setMinutes, s:date.setSeconds, S:date.setMilliseconds }; for(let i = 0,formatLenCount = 0,len = formatArr.length;i<len;i++){ let formatUnit = formatArr[i]; if(formatUnit){ let char0 = formatUnit.charAt(0); if(reg.test(char0)){ let dateUnit = dateStr.substring(formatLenCount,formatLenCount+formatUnit.length); char0==="M"?formatObj[char0].call(date,dateUnit-1):formatObj[char0].call(date,dateUnit); } } formatLenCount += formatUnit.length; } return date; },
/**
* y 年(201X)
* M 年中的月份(1-12)
* d 月份中的天数(1-31)
* H 一天中的小时数(0-23)
* h am/pm 中的小时数(1-12)
* m 小时中的分钟数(0-59)
* s 分钟中的秒数(0-59)
* S 毫秒数(0-999)
*/
/**
* 格式化输出日期
* eq: dateFormat(new Date(),"yyyy-MM-dd HH:mm:ss")
*/
export const dateFormat = (date,format) => {
let reg = /[yMdHhmsS]/;
let formatArr = format.match(/(.)\1*/g);
let formatObj = {
y:""+date.getFullYear(),
M:"0"+(date.getMonth()+1),
d:"0"+date.getDate(),
H:"0"+date.getHours(),
h:"0"+(date.getHours()>12?date.getHours()-12:(date.getHours()==0?12:date.getHours())),
m:"0"+date.getMinutes(),
s:"0"+date.getSeconds(),
S:"00"+date.getMilliseconds()
};
let str = "";
for(let i= 0,len = formatArr.length;i<len;i++){
if(formatArr[i]){
let char0 = formatArr[i].charAt(0);
if(reg.test(char0)){
let charLen = formatArr[i].length;
str += formatObj[char0].slice(charLen*-1);
}else{
str += formatArr[i];
}
}
}
return str;
},
/**
* 字符串转化为Date对象
* eq: parseDate("yyyy-MM-dd HH:mm:ss","2017-10-24 20:33:11")
*/
export const parseDate = (dateStr,format) => {
if(dateStr.length!==format.length){
console.warn("parseDate: the length of the dateString and format is not equal");
}
let reg = /[yMdHhmsS]/;
let formatArr = format.match(/(.)\1*/g);
let date = new Date();
let formatObj = {
y:date.setFullYear,
M:date.setMonth,
d:date.setDate,
H:date.setHours,
h:date.setHours,
m:date.setMinutes,
s:date.setSeconds,
S:date.setMilliseconds
};
for(let i = 0,formatLenCount = 0,len = formatArr.length;i<len;i++){
let formatUnit = formatArr[i];
if(formatUnit){
let char0 = formatUnit.charAt(0);
if(reg.test(char0)){
let dateUnit = dateStr.substring(formatLenCount,formatLenCount+formatUnit.length);// 可以得到 2017 | 10
char0==="M"?formatObj[char0].call(date,dateUnit-1):formatObj[char0].call(date,dateUnit);
}
}
formatLenCount += formatUnit.length;
}
return date;
},