将 moment.js 转换为 date-fns

Convert moment.js to date-fns

我需要将其从 moment.js moment(date, 'DD MM YYYY').isBefore(moment()) 转换为 date-fns。 我试过了isBefore(format(value, 'dd-MM-yyyy'), sub(new Date(), { days: 1 }))。我提到现在我必须减去 1 天。 因此,功能将是比较 value,这是给定的日期与 currentDate - 1 天。 本质上,检查是否给出了未来日期(未来日期包括当天)。 希望这已经足够清楚了。我的示例不起作用,我不明白为什么。

您似乎在使用 format 而不是 parseisBefore 接受 numberDate 而不是字符串作为其第一个参数。

参见示例:

function compareDate(value: string) {
  return isBefore(
    parse(value, 'dd-MM-yyyy', new Date()),
    sub(new Date(), { days: 1 })
  );
}

const test = compareDate('31-12-2020');
console.log(test);

根据评论中的要求

我们可以 运行 函数的值将所有 /\s 替换为 -.

function unifyDateString(value: string) {
  try {
    return value.split("/").join("-").split(" ").join("-");
  } catch {
    return value;
  }
}

function compareDate(value: string) {
  return isBefore(
    parse(unifyDateString(value), "dd-MM-yyyy", new Date()),
    sub(new Date(), { days: 1 })
  );
}

const one = compareDate("31-12-2020");
const two = compareDate("31/12/2020");
const three = compareDate("31 12 2020");

console.log(one);
console.log(two);
console.log(three);