Moment.js比较总是返回false

时间:2018-12-13 17:36:41

标签: javascript momentjs

我正在为一个奇怪的问题而苦苦挣扎,但让我们首先谈谈我要实现的目标。我正在开发一个“从-到”日期和时间选择器,现在我陷入了检查第一个值(从)是否不位于第二个值(到)之后的问题。我正在使用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

1 个答案:

答案 0 :(得分:0)

引用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