日付解析関数
2508 ワード
半製品です.間に合わせてください.
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'));