增强JavaScript中的日期构造函数
在编写程序时,需要使用javascript中的日期构造函数。经过使用发现,它不提供类似new Date("<chsdate year="2004" month="1" day="1" islunardate="False" isrocdate="False" w:st="on">2004-01-01</chsdate>")这样的构造,但是对于var dd =new Date('2008/34/42')是可以通过的,显示的日期是Thu Nov 11 00:00:00 UTC+0800 2010。由此表明Date函数只支持斜杠分隔的日期。为了支持连字符的日期格式,下面是某个人书写的代码如下:
<script language="javascript">
//功能:扩展日期函数,支持YYYY-MM-DD或YYYY-MMDD hh:mm:ss字符串格式
//返回:如果正确,则返回javascript中支持UTC日期格式,如果错误,则返回false
//作者:王洪生(Kevin)
//日期:<chsdate year="2004" month="12" day="15" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">2004-12-15</span></chsdate>
//举例: var myDate = Date_Ex("2004-12-21 23:01:00"); //返回正确的日期
// var myDate = Date_Ex("<chsdate year="2004" month="12" day="21" islunardate="False" isrocdate="False" w:st="on">2004-12-21</chsdate>"); //返回正确的日期
// var myDate = Date_Ex("2004-23-12 12:60:29");//返回false,且提示日期或时间超出有效范围
function Date_Ex(value1)
{
var strDate = value1;
if (strDate.length == 0)
return false;
//先判断是否为短日期格式:YYYY-MM-DD,如果是,将其后面加上00:00:00,转换为YYYY-MM-DD hh:mm:ss格式
var reg = /^(/d{1,4})(-|//)(/d{1,2})/2(/d{1,2})/; //短日期格式的正则表达式
var r = strDate.match(reg);
if (r != null) //说明strDate是短日期格式,改造成长日期格式
strDate = strDate + " 00:00:00";
reg = /^(/d{1,4})(-|//)(/d{1,2})/2(/d{1,2}) (/d{1,2}):(/d{1,2}):(/d{1,2})/;
r = strDate.match(reg);
if (r == null)
{
alert("你输入的日期格式有误,正确格式为:<chsdate year="2004" month="12" day="1" islunardate="False" isrocdate="False" w:st="on"><span lang="EN-US">2004-12-01</span></chsdate> 或 2004-12-01 12:23:45");
return false;
}
var d = new Date(r[1], r[3]-1,r[4],r[5],r[6],r[7]);
if (d.getFullYear()==r[1]&&(d.getMonth()+1)==r[3]&&d.getDate()==r[4]&&d.getHours()==r[5]&&d.getMinutes()==r[6]&&d.getSeconds()== r[7])
{
return d;
}
else
{
alert("你输入的日期或时间超出有效范围,请仔细检查!");
return false;
}
}
将以上代码复制到你的页面中,就可以进行测试使用了!