您的位置:首页 > Web前端 > JavaScript

JavaScript中扩展字符串与Date对象之间的转换,支持大多数日期格式的字符串(包括中文)

2009-02-18 08:40 1056 查看
首先是对日期字符串的判断,支持格式yyyyMMdd, dd-MM-yyyy, yyyy-MM-dd, yyyy/MM/dd, dd/MM/yyyy, yyyy.MM.dd, dd.MM.yyyy,等任意相同分隔符(需程序员自己定义) 和yyyy年MM月dd日等多种格式,最重要的是支持瑞年2月的判断和每月30号和31号的判断,基本符合任意格式字符串的日期判断。

代码奉上:

/*!
*	date: 2009-2-13
*	author: Xing,XiuDong
*  url: http://blog.csdn.net/xxd851116 *  e-mail: xingxiudong[at]gmail.com
*	desciption: Expand String's method: isDate
*	version:v1.0
*/
String.prototype.isDate = function() {
// 定义日期正则表达式,改表达式引自:http://blog.csdn.net/Rocketboy911/archive/2007/09/14/1784784.aspx
var  pattern = /^(([0-9]{3}[1-9]|[0-9]{2}[1-9][0-9]{1}|[0-9]{1}[1-9][0-9]{2}|[1-9][0-9]{3})-(((0[13578]|1[02])-(0[1-9]|[12][0-9]|3[01]))|((0[469]|11)-(0[1-9]|[12][0-9]|30))|(02-(0[1-9]|[1][0-9]|2[0-8]))))|((([0-9]{2})(0[48]|[2468][048]|[13579][26])|((0[48]|[2468][048]|[3579][26])00))-02-29)$/

var dateStr = this;
//各种日期格式智能化判断
if(/^/d{8}$/.test(this)) {	//格式为:yyyyMMdd
dateStr = this.substring(0,4) + "-" + this.substring(4,6) + "-" + this.substring(6,8);
} else if(/^/d{4}/D/d{2}/D/d{2}$/g.test(this)) {	//格式为:yyyy(x-任意分隔符)MM(x)dd
if(this.charAt(4) != this.charAt(7)) return false;
dateStr = this.split(this.charAt(4)).join("-");
} else if(/^/d{2}/D/d{2}/D/d{4}$/g.test(this)) {	//格式为:dd(x-任意分隔符)MM(x)yyyy
if(this.charAt(2) != this.charAt(5)) return false;
dateStr = this.split(this.charAt(2)).reverse().join("-");
} else if(/^/d{4}/u5e74((0[1-9])|(1[0-2]))/u6708((0[1-9])|([12]/d)|(3[01]))/u65e5$/.test(this)) {	//对中文的支持,格式为:yyyy年MM月dd日
dateStr = this.replace(//u5e74|/u6708/g,"-").replace(//u65e5/g,"");
}
return pattern.test(dateStr);
}


测试代码:

println("yyyy/MM/dd格式的判断:");
println("2008/08/08:	"+"2008/08/08".isDate());//对普通日期的判断
println("2008/02/28:	"+"2008/02/28".isDate());//对闰月的判断
println("2008/02/29:	"+"2008/02/29".isDate());
println("2009/02/28:	"+"2009/02/28".isDate());
println("2009/02/29:	"+"2009/02/29".isDate());
println("2008/08/31:	"+"2008/08/31".isDate());//对大月和小月的判断
println("2008/07/31:	"+"2008/07/31".isDate());
println("2008/06/30:	"+"2008/06/30".isDate());
println("2008/06/31:	"+"2008/06/31".isDate());
println("2008/08/32:	"+"2008/08/32".isDate());//不符合日期的判断
println("2008/07/32:	"+"2008/07/32".isDate());
println();
println("yyyy-MM-dd格式的判断:");
println("2008-08-08:	"+"2008-08-08".isDate());//对普通日期的判断
println("2008-02-28:	"+"2008-02-28".isDate());//对闰月的判断
println("2008-02-29:	"+"2008-02-29".isDate());
println("2009-02-28:	"+"2009-02-28".isDate());
println("2009-02-29:	"+"2009-02-29".isDate());
println("2008-08-31:	"+"2008-08-31".isDate());//对大月和小月的判断
println("2008-07-31:	"+"2008-07-31".isDate());
println("2008-06-30:	"+"2008-06-30".isDate());
println("2008-06-31:	"+"2008-06-31".isDate());
println("2008-08-32:	"+"2008-08-32".isDate());//不符合日期的判断
println("2008-07-32:	"+"2008-07-32".isDate());
println();
println("中文格式的判断:");
println("2008年02月28日:	"+"2008年02月28日".isDate());
println("2008年02月29日:	"+"2008年02月29日".isDate());
println("2009年02月28日:	"+"2009年02月28日".isDate());
println("2009年02月29日:	"+"2009年02月29日".isDate());
println();
println("dd/MM/yyyy格式的判断:");
println("28/02/2008:	"+"28/02/2008".isDate());//对闰月的判断
println("29/02/2008:	"+"29/02/2008".isDate());
println("28/02/2009:	"+"28/02/2009".isDate());
println("29/02/2009:	"+"29/02/2009".isDate());
println();
println("yyyyMMdd格式的判断:");
println("20080228:	"+"20080228".isDate());//对闰月的判断
println("20080229:	"+"20080229".isDate());
println("20090228:	"+"20090228".isDate());
println("20090229:	"+"20090229".isDate());
println();
println("dd-MM-yyyy格式的判断:");
println("28-02-2008:	"+"28-02-2008".isDate());//对闰月的判断
println("29-02-2008:	"+"29-02-2008".isDate());
println("28-02-2009:	"+"28-02-2009".isDate());
println("29-02-2009:	"+"29-02-2009".isDate());
println();
println("目前不支持的格式:");
println("2008/8/8:		"+"2008/8/8".isDate());	//目前暂不支持这种格式
println("2008/08-08:	"+"2008/08-08".isDate());


测试结果:

yyyy/MM/dd格式的判断:
2008/08/08: true
2008/02/28: true
2008/02/29:
true
2009/02/28: true
2009/02/29: false
2008/08/31: true
2008/07/31:
true
2008/06/30: true
2008/06/31: false
2008/08/32:
false
2008/07/32: false

yyyy-MM-dd格式的判断:
2008-08-08:
true
2008-02-28: true
2008-02-29: true
2009-02-28: true
2009-02-29:
false
2008-08-31: true
2008-07-31: true
2008-06-30: true
2008-06-31:
false
2008-08-32: false
2008-07-32: false

中文格式的判断:
2008年02月28日:
true
2008年02月29日: true
2009年02月28日: true
2009年02月29日:
false

dd/MM/yyyy格式的判断:
28/02/2008: true
29/02/2008:
true
28/02/2009: true
29/02/2009: false

yyyyMMdd格式的判断:
20080228:
true
20080229: true
20090228: true
20090229:
false

dd-MM-yyyy格式的判断:
28-02-2008: true
29-02-2008:
true
28-02-2009: true
29-02-2009: false

目前不支持的格式:
2008/8/8:
false
2008/08-08: false
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: