日期解析函数

半成品,凑合用一下。


function parseDate(str,fm){
var start = 0,ch1 = null,ch2 = null;
var chReg = /^[yMdhms]$/,
nReg = /^\d$/;
str = str.replace(/^\s+/g,'').replace(/\s+$/,'');
fm = fm.replace(/^\s+/g,'').replace(/\s+$/,'');
if(str.length !== fm.length){
return null;
}

var dtArr = [];
function convert(start,end){
var tmp = parseInt(str.substring(start,end),10);
switch(ch1){
case 'y' : dtArr[0] = tmp;break;
case 'M' : dtArr[1] = tmp - 1;break;
case 'd' : dtArr[2] = tmp;break;
case 'h' : dtArr[3] = tmp;break;
case 'm' : dtArr[4] = tmp;break;
case 's' : dtArr[5] = tmp;break;
default: throw new Error("Invalid Date.");
}
}

ch1 = fm.charAt(i);
var flag = true;//有效字符开始标志
try{
for(var i = 0,len = fm.length; i < len; i++){
ch2 = fm.charAt(i);
if(chReg.test(ch2) && nReg.test(str.charAt(i))){//有效日期字符
if(ch2 === ch1){
continue;
}else{//新的时间
ch1 = ch2;
if(flag){
convert(start,i);
}
flag = true;
start = i;
}
}else if(ch2 === str.charAt(i)){
if(flag){
convert(start,i);
}else{
start = i;
}
flag = false;
}else{
throw new Error('format no match.');
}
}
convert(start,i);
}catch(e){
console.error(e);
return null;
}

return new Date(dtArr[0],dtArr[1],dtArr[2],dtArr[3]||0,dtArr[4]||0,dtArr[5]||0,0);
}



usage:
console.log(parseDate('2014-11-08','yyyy-MM-dd'));
console.log(parseDate('2014-02-08 22:22:12','yyyy-MM-dd hh:mm:ss'));
console.log(parseDate('31/01/2011','dd/MM/yyyy'));
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值