在 中moment,我可以使用下面的代码来格式化可能具有不同格式样式的日期字符串。 let test=['2022-04-29', '04-29-2022','29-04-2022', '4/29/2022', '29/4/2022'] test.forEach((value)=>{ const dateFormats=['MM-DD-YYYY', 'DD-MM-YYYY', 'YYYY-MM-DD', 'YYYY-DD-MM']; console.log( moment(value, dateFormats).format('MM-DD-YYYY')); }); 可以正确解析所有日期字符串。换成的 时候,没找到好的办法。只接受一种日期格式字符串。 这是我的解决方法:momentdate-fnsparse test(){ let test=['2022-04-29', '04-29-2022','29-04-2022', '4/29/2022', '29/4/2022'] test.forEach((value)=>{ const formatStyle=this.GetDateFormat(value); if(!formatStyle) { return 'Invalid Date'; } const temp=parse(value, formatStyle, new Date()); console.log(format(temp, 'MM-dd-yyyy')); }); } dateFormatArray=['MM-dd-yyyy', 'MM/dd/yyyy', 'MM.dd.yyyy', 'dd-MM-yyyy', 'dd/MM/yyyy', 'dd.MM.yyyy', 'yyyy-MM-dd', 'yyyy/MM/dd', 'yyyy.MM.dd', 'yyyy-dd-MM', 'yyyy/dd/MM','yyyy.dd.MM'] GetDateFormat(date:string):string{ let format='invalid'; this.dateFormatArray.forEach((dateFormat) => { if(isMatch(date, dateFormat)){ format = dateFormat; } }); return format; } 是否有其他更好的方法来解析包含不同格式样式的日期字符串date-fns?

你可以尝试使用不同的库date-fns-tz来使用这样的日期字符串......或者你可以使用dateRegexes它来实现相同的date-fns import { zonedTimeToUtc } from 'date-fns-tz'; const test=['2022-04-29', '04-29-2022','29-04-2022', '4/29/2022', '29/4/2022']; test.forEach((value) => { const dateFormats=['MM-DD-YYYY', 'DD-MM-YYYY', 'YYYY-MM-DD', 'YYYY-DD-MM']; const date=dateFormats.reduce((acc, format) => acc || zonedTimeToUtc(value, format), null); if (date) { console.log(format(date, 'MM-dd-yyyy')); } else { console.log('Invalid Date'); } }); 希望这可以帮助...