在 momentjs 中重用日期对象

Reusing a date object in momentjs

我有一个正在过滤的 Javascript 集合。在回调中,我正在实例化一个新的 moment 对象,它会破坏过滤器功能。

var today = new moment().format('YYYY-MM-DD');
return this.collection.filter((vocab) => {
  let benchmarkDate = new moment(vocab.interval_benchmark_date).format();

  return benchmarkDate.isAfter(today);
});

是否可以在过滤器之前实例化 moment 对象,然后在过滤器回调的每次迭代中重用它,并在每个新日期重置它?

TLDR - 从 let benchmarkDate = new moment(vocab.interval_benchmark_date).format(); 中删除 .format(),您的过滤应该会再次起作用。 .format() 创建一个日期字符串值,而不是像以前那样的 moment 对象,因此它无法访问像 .isAfter()

这样的原始 moment 方法

Is it possible to instantiate the moment object before the filter and then reuse it in each iteration of the filter callback be resetting it with each new date?

,你肯定应该这样做,因为moment()大量使用(可能像这样循环)会产生不小的成本,最终可能成为您性能的瓶颈。您打的 moment() 电话越少越好。在任何地方重复使用(除了使用 .add() 等进行修改,因为 moment 会直接改变数据)

然而,在您这里的特定实例中 - 您对不同 date/time 信息的迭代是创建不同时刻的原因,您可以通过在每次迭代中改变同一时刻(通过使用 .reduce() 方法继续使用以前的结果)


此外,您正在执行 let benchmarkDate = ...format(),这会创建一个 string,然后您尝试在其上 运行 .isAfter() - 它不会存在,因为它不是Moment 对象了。由于 .format() 的结果无论如何都未使用,您可以删除它,它应该没问题。


哦,moment() 函数不需要 new 关键字来 return 对象。