javascript - 比较 JS 中的日期与 d/m/yyyy 格式?

标签 javascript

我使用此代码来比较两个日期,它非常适合 m/d/yyyyyyyy-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/

相关文章:

javascript - 如何获得动态大小的 div 的新大小?

javascript - 如何从同一元素中的另一个属性获取一个属性

javascript - 在单引号或双引号外用分号分隔的正则表达式

javascript - 在打开侧边栏之前禁用滚动到页面顶部

javascript - 底色故障读数

javascript - 如何检查 null 或未定义的方法?

javascript - 我如何使用此 JavaScript 返回带有特定哈希标签的推文?

javascript - 是否可以以编程方式配置 MongoDB?

javascript - 当我按退格键时仍然显示错误消息(e.which ==8)

javascript - 在 map 上自动平移 javascript