一个字符串按格式转时间对象的函数
最近遇到一个问题,JS比较两个输入框里输入的日期时间的大小,一直没有想到比较好的方式实现,于是在网上查到了一个比较实用的方法,特此记录发布一下,感觉还挺实用的.
<!doctype html>
<html>
<body>
<script>
/**
* 根据时间格式化字符串和时间文本值转换会时间对象
* @param {} value
* 时间文本值
* @param {} format
* 格式化字符串:以Y表示fullYear、y表示year,M表示月份,D或d表示日期,H或h表示小时,m表示分钟,S表示秒钟,s表示毫秒
* @return {}
* 返回一个时间
* 未指定年、月、日则取当前时间的年、月、日。
* 未指定时、分、秒、毫秒,则都取0.
*/
var parse = function(value, format) {
var vs = value.split(/[^ymdhs\d]/i), fs = format.split(/[^ymdhs\d]/i);
if(vs.length != fs.length) throw {message:"格式和值不一致"};
var d = new Date();
d.setHours(0);
d.setMinutes(0);
d.setSeconds(0);
d.setMilliseconds(0);
for(var i = 0, il = vs.length; i < il; i++){
switch(fs[i]){
case 'Y':
d.setFullYear(parseInt(vs[i]));
break;
case 'y':
d.setYear(parseInt(vs[i]));
break;
case 'M':
d.setMonth(parseInt(vs[i]) - 1);
break;
case 'd':
case 'D':
d.setDate(parseInt(vs[i]));
break;
case 'h':
case 'H':
d.setHours(parseInt(vs[i]));
break;
case 'm':
d.setMinutes(parseInt(vs[i]));
break;
case 'S':
d.setSeconds(parseInt(vs[i]));
break;
case 's':
d.setMilliseconds(parseInt(vs[i]));
break;
}
}
return d
};
var d1 = parse('2013-10-24 00:00:01', 'Y-m-d H:m:s'), d2 = parse('2013-10-24 00:00:03', 'Y-m-d H:m:s');
var t = d1 - d2;
if(t > 0) alert('d1 大于 d2');
else if(t == 0) alert('d1 等于 d2');
else alert('d1 小于 d2');
</script>
</body>
</html>