分享一个工具方法:日期格式化 & 日期转化,用法与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;
},
posted @ 2021-11-05 17:53  王阿灿  阅读(88)  评论(0编辑  收藏  举报