【问题标题】:Moment.js comparison always returns falseMoment.js 比较总是返回 false
【发布时间】:2018-12-14 02:09:24
【问题描述】:

我正在努力解决一个奇怪的问题,但让我们先谈谈我想要实现的目标。我正在开发一个从到日期和时间选择器,现在我被困在检查第一个值(从)是否不在第二个值(到)之后的部分。我正在使用 moment.js,它工作得很好.. 除了三个查询:isBeforeisAfterisSame

我的代码看起来像这样if(moment(from).isAfter(to)) { ... },它返回false。实际上,我进一步进行了测试并检查了所有/最可能的组合。这是输出:

EARLY  equals  "31.12.2018 11:00"
LATE   equals  "01.12.2018 10:00"

LATE   is before   EARLY  =  false   (should equal true)
EARLY  is after    LATE   =  false   (should equal true)
LATE   is after    EARLY  =  false
EARLY  is before   LATE   =  false
EARLY  is same as  LATE   =  false
LATE   is same as  EARLY  =  false

我不知道问题可能是什么。我 100% 认为这两个变量都是字符串,我将它们都解析为 moment(),我什至可以通过编程方式添加和减去天数、月数等,而不会出现任何错误。

尝试比较两个该死的日期是漫长的一天。现在我希望社区比我更聪明! :D

【问题讨论】:

  • 生成输出的代码怎么样?

标签: javascript momentjs


【解决方案1】:

引用moment.js docs

以下返回false

  • invalid.isAfter(another)
  • invalid.isAfter(invalid)
  • another.isAfter(invalid)
  • invalid.isBefore(another)
  • invalid.isBefore(invalid)
  • another.isBefore(invalid)

很有可能,您的一个(或两个)日期无效(或无效)。

我的猜测是您错误地解析了日期。 Docs 建议对非标准日期格式使用 String + 格式。

const incorrect = '31.12.2017 11:00';
console.log(moment(incorrect)); // invalid date

const correct = '31.12.2017 11:00';
console.log(moment(correct, 'DD.MM.YYYY HH:mm')); // valid date

【讨论】:

  • 嗯,是的,可能是这样。我回家后要测试一下。谢谢?
  • 经过数小时的失败,我尝试了这个moment(moment("31.12.2018 12:00").format("DD.MM.YYYY HH:mm")).isBefore(moment("01.12.2018 12:00").format("DD.MM.YYYY HH:mm")),它也返回了false
  • @MikeEling 试试moment("31.12.2018 12:00", "DD.MM.YYYY HH:mm").isBefore(moment("01.12.2018 12:00", "DD.MM.YYYY HH:mm"))?
  • 这个解决方案确实有效!非常感谢,感谢您的帮助☺
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-25
  • 1970-01-01
  • 1970-01-01
  • 2013-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多