本文介绍JavaScript中字符串与日期对象的相互转换方法,以及利用正则表达式对日期字符串进行格式化的技巧。通过具体代码示例,展示了如何将包含年月日时分秒的字符串解析为Date对象,以及如何将日期对象格式化为指定格式的字符串,包括使用正则替换实现日期的标准化输出。
字符串与日期转换概述
在JavaScript开发中,经常需要进行字符串与日期对象之间的相互转换,以及对日期进行特定格式的格式化输出。
基础转换与格式化函数
// 2014-02-25
/**
* 字符串转时间(yyyy-MM-dd HH:mm:ss)
* result (分钟)
*/
stringToDate : function(fDate){
var fullDate = fDate.split("-");
return new Date(fullDate[0], fullDate[1]-1, fullDate[2], 0, 0, 0);
}
/**
* 格式化日期
* @param date 日期
* @param format 格式化样式,例如yyyy-MM-dd HH:mm:ss E
* @return 格式化后的金额
*/
formatDate : function (date, format) {
var v = "";
if (typeof date == "string" || typeof date != "object") {
return;
}
var year = date.getFullYear();
var month = date.getMonth()+1;
var day = date.getDate();
var hour = date.getHours();
var minute = date.getMinutes();
var second = date.getSeconds();
var weekDay = date.getDay();
var ms = date.getMilliseconds();
var weekDayString = "";
if (weekDay == 1) {
weekDayString = "星期一";
} else if (weekDay == 2) {
weekDayString = "星期二";
} else if (weekDay == 3) {
weekDayString = "星期三";
} else if (weekDay == 4) {
weekDayString = "星期四";
} else if (weekDay == 5) {
weekDayString = "星期五";
} else if (weekDay == 6) {
weekDayString = "星期六";
} else if (weekDay == 7) {
weekDayString = "星期日";
}
v = format;
//Year
v = v.replace(/yyyy/g, year);
v = v.replace(/YYYY/g, year);
v = v.replace(/yy/g, (year+"").substring(2,4));
v = v.replace(/YY/g, (year+"").substring(2,4));
//Month
var monthStr = ("0"+month);
v = v.replace(/MM/g, monthStr.substring(monthStr.length-2));
//Day
var dayStr = ("0"+day);
v = v.replace(/dd/g, dayStr.substring(dayStr.length-2));
//hour
var hourStr = ("0"+hour);
v = v.replace(/HH/g, hourStr.substring(hourStr.length-2));
v = v.replace(/hh/g, hourStr.substring(hourStr.length-2));
//minute
var minuteStr = ("0"+minute);
v = v.replace(/mm/g, minuteStr.substring(minuteStr.length-2));
//Millisecond
v = v.replace(/sss/g, ms);
v = v.replace(/SSS/g, ms);
//second
var secondStr = ("0"+second);
v = v.replace(/ss/g, secondStr.substring(secondStr.length-2));
v = v.replace(/SS/g, secondStr.substring(secondStr.length-2));
//weekDay
v = v.replace(/E/g, weekDayString);
return v;
}
// dateValue=2014-02-28
var cDate = _STAGE.stringToDate(dateValue);
cDate.setDate(cDate.getDate()+1);
currentDate = jAnXin.util.formatDate(cDate, "yyyy-MM-dd");
console.log(currentDate ); // 2014-03-01
基于正则的日期格式化方法
实现这一功能的核心在于利用正则表达式替换日期中的非数字字符,并重新组合成目标格式。
首先尝试将日期字符串转换为纯数字形式,以便后续处理。
提取纯数字日期
ar ttDate = "2013年12月20日 14:20:20";
ttDate = ttDate.replace(/[^0-9]/mg, '').match(/.{8}/);
alert(ttDate);
经过处理后,得到的结果字符串仅包含数字部分。
20131220
接下来,将处理后的字符串转换为标准的日期对象类型。
格式化为标准日期字符串
var ttDate = "2013年12月20日 14:20:20";
ttDate = ttDate.match(/\d{4}.\d{1,2}.\d{1,2}/mg).toString();
ttDate = ttDate.replace(/[^0-9]/mg, '-');
alert(ttDate);
转换后的日期对象可以用于进一步的日期计算或展示。
2013-12-20
使用更复杂的正则表达式进行替换,可以直接将原始日期字符串转换为标准的yyyy-MM-dd格式。
超级正则替换技巧
var ttDate = "2013年12月20日 14:20:20";
ttDate = ttDate.replace(/(\d{4}).(\d{1,2}).(\d{1,2}).+/mg, '$1-$2-$3');
alert(ttDate);
最终输出的结果符合标准的日期格式要求。
2013-12-20