解析可能包含或不包含年份的JavaScript日期字符串

解析可能包含或不包含年份的JavaScript日期字符串,javascript,date,Javascript,Date,我需要解析日期字符串,这些字符串可能有年份,也可能没有年份。以下是一些例子: # with year s1 = '2020-01-01' s2 = '2020-11-22' # without year s3 = '01-01' s4 = '11-22' 目标是以以下对象结束: obj1 = {'month': 1, 'day': 1, 'year': 2020} obj2 = {'month': 11, 'day': 22, 'year': 2020} obj3 = {'month': 1

我需要解析日期字符串,这些字符串可能有年份,也可能没有年份。以下是一些例子:

# with year
s1 = '2020-01-01'
s2 = '2020-11-22'

# without year
s3 = '01-01'
s4 = '11-22'
目标是以以下对象结束:

obj1 = {'month': 1, 'day': 1, 'year': 2020}
obj2 = {'month': 11, 'day': 22, 'year': 2020}
obj3 = {'month': 1, 'day': 1}
obj4 = {'month': 11, 'day': 22}

有没有一种简单的方法来解析它?

这是您需要的函数:

dates.reduce((obj,date,i)=>{
const[day,month,year]=date.match(/\d+/g).reverse().map(数字);
obj['obj'+++i]=年{日,月,年}:{日,月};
返回obj;
}, {});
下面是一个活生生的例子:

“严格使用”;
施工日期=['2020-01-01','2020-11-22','01-01','11-22'];
const result=dates.reduce((对象,日期,i)=>{
const[day,month,year]=date.match(/\d+/g).reverse().map(数字);
obj['obj'+++i]=年{日,月,年}:{日,月};
返回obj;
}, {});
控制台日志(结果);
/*
{
obj1:{日期:1,月份:1,年份:2020},
obj2:{日期:22,月份:11,年份:2020},
obj3:{日:1,月:1},
obj4:{日:22,月:11}
}

*/
只需分成几个部分,并根据是否有一年返回适当的对象,例如

函数解析特殊{
设[a,b,c]=s.split(/\D/);
返回c{天:+c,月:+b,年:+a}:{天:+b,月:+a};
}
['2020-01-01',
'2020-11-22',
'01-01',
'11-22'
].forEach(s=>console.log(s))