js 把字符串格式化成時間


一 需求

js里面的Date.parse() 方法接收字符串,返回一個時間,但是接收的字符串格式缺不能指定,這很蛋疼,這樣就有了瀏覽器差異,所以需要一個可以指定字符串格式的方法,將時間字符串轉化為時間

二 分析

難點在於占位符個數的問題,需要格式字符串和時間字符串完全的匹配才可以,這樣就限制了功能,但是目前我還沒想到什么辦法來解決這個問題,只能做一個初步的實現,滿足我基本的需求

三 代碼

/**
 * 根據formatter字符串轉換時間字符串
 * 月(M)、日(d)、小時(h)、分(m)、秒(s) 占位符個數需要和時間字符串匹配
 * @param  {string} dateStr 時間字符串 如:"2015-11-12"
 * @param  {string} fmt     格式化字符串 如:"yyyy-MM-dd"
 * @return {Date}         	標准時間
 * author: shaojiasong 2015-12-29
 */
function parseDate(dateStr,fmt){
	if(!dateStr || !fmt || (dateStr.length != fmt.length)) {
		throw new Error("轉換時間時發生錯誤,時間字符串與格式字符串不匹配!");
	}
        //排除特殊字符,避免正則發生錯誤
        fmt = fmt.replace(/([\^\$\.\*\+\?\=\!\:\|\\\/\(\)\[\]\{\}])/ig,"\\$1");
	function getReg(str){
		var cfmt = fmt;
		cfmt = cfmt.replace(new RegExp(str+"+","g"),function(full){ return "("+full+")";}) || "";
		return cfmt.replace(/[yMdhmsS]/g,"\\d"); 
	}
	var year   = parseInt((new RegExp(getReg("y")).exec(dateStr)[1])) || 0;
	var month  = parseInt((new RegExp(getReg("M")).exec(dateStr)[1])) - 1 || 0;
	var day    = parseInt((new RegExp(getReg("d")).exec(dateStr)[1])) || 0;
	var hour   = parseInt((new RegExp(getReg("h")).exec(dateStr)[1])) || 0;
	var minute = parseInt((new RegExp(getReg("m")).exec(dateStr)[1])) || 0;
	var second = parseInt((new RegExp(getReg("s")).exec(dateStr)[1])) || 0;

	return new Date(year,month,day,hour,minute,second);
}

用例

var mydate = parseDate("2015-11-12 12:25:30","yyyy-MM-dd hh:mm:ss"); //結果: Thu Nov 12 2015 12:25:30 GMT+0800 (中國標准時間)

如果有別的實現,歡迎留言給我,謝謝~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM