我使用此代码来比较两个日期,它非常适合 m/d/yyyy
和 yyyy-m-d
但不适用于 d/m/yyyy
(至少在 FF 和美国)。
无论如何,我可以添加我想要使用的格式(我需要它与所有三个选项一起使用)?类似于 new Date('14/1/2020', 'd/m/yyyy')
?
var date1 = new Date('14/1/2020');
var date2 = new Date('12/1/2020');
if( date1 > date2 ) { //... }
最佳答案
我建议拆分字符串并将各个片段作为单独的参数传递给 new Date()
。
const str = '14/1/2020';
const [day,month,year] = str.split('/');
const date = new Date(year, month-1, day);
如果您需要它支持所有三种格式,您可以将其设为可重用函数并让它接受 format
参数。
const toDate = (str, format = 'm/d/yyyy') => {
let month, day, year;
if (format == 'm/d/yyyy')
[month, day, year] = str.split("/");
else if (format == 'd/m/yyyy')
[day, month, year] = str.split("/");
else if (format == "yyyy-m-d")
[year, month, day] = str.split("-");
else
throw "Unexpected date format";
return new Date(year, month-1, day);
}
const str1 = '1/14/2020';
const str2 = '14/1/2020';
const str3 = '2020-1-14';
console.log( toDate(str1) );
console.log( toDate(str2,'d/m/yyyy') );
console.log( toDate(str3,'yyyy-m-d') );
或者,对于在需要添加格式时可能更具可扩展性的方法,您可以使用对象来定义它们:
const validFormats = [
{
format: 'm/d/yyyy',
delimiter: '/',
order: 'mdy'
},
{
format: 'd/m/yyyy',
delimiter: '/',
order: 'dmy'
},
{
format: 'yyyy-m-d',
delimiter: '-',
order: 'ymd'
}
];
const toDate = (dateString, format = 'm/d/yyyy') => {
const validFormat = validFormats.find(d => d.format === format)
if (!validFormat) throw "Unexpected date format";
const order = validFormat.order;
const dateParts = dateString.split(validFormat.delimiter);
const year = dateParts[order.indexOf('y')];
const month = dateParts[order.indexOf('m')];
const day = dateParts[order.indexOf('d')];
return new Date(year,month-1,day);
};
const str1 = '1/14/2020';
const str2 = '14/1/2020';
const str3 = '2020-1-14';
console.log( toDate(str1) );
console.log( toDate(str2,'d/m/yyyy') );
console.log( toDate(str3,'yyyy-m-d') );
关于javascript - 比较 JS 中的日期与 d/m/yyyy 格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59793910/