一个字符串按格式转时间对象的函数

    最近遇到一个问题,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>

posted @ 2013-10-24 15:08  优秀程序缘  阅读(162)  评论(0编辑  收藏  举报