【问题标题】:Moment.js isBefore function not working as expectedMoment.js isBefore 函数未按预期工作
【发布时间】:2017-04-09 23:05:19
【问题描述】:

我的控制台日志给了我一个意外的输出。

var bool = (moment("2017-04-08 23:00:00").isBefore(moment("2017-04-09 01:00:00", 'day')));
console.log(bool);

由于某种原因,输出为假。 根据文档,以下代码应返回 true。

moment('2010-10-20').isBefore('2011-01-01', 'year')

即使不是过去的一整年,如果是不同的年份,我的理解是它应该返回 false。 就我而言,虽然还不是 24 小时,但这是不同的一天。 有什么我没有正确理解的地方吗?

【问题讨论】:

  • moment("2017-04-09 01:00:00", 'day') 是一个东西吗?
  • @OliverCharlesworth 我相信它是:见momentjs.com/docs/#/query/is-before。我认为这里的问题是假定的时区。那些很可能是标准化为UTC或其他东西的同一天。不过我只是猜测。
  • @OliverCharlesworth 正如 Aluan 所说,确实如此。它只是说明了之前测试的粒度。
  • @Marissa - 对moment(...) 的调用没有测试。

标签: javascript momentjs


【解决方案1】:

@Oliver Charlesworth 是对的,moment() 不接受 'day' 作为第二个参数。查看here 并向下滚动查看其所有有效签名。


话虽如此,您可以转换

isBefore(moment("2017-04-09 01:00:00", 'day'));

isBefore(moment('2017-04-09 01:00:00'), 'day');

或到

isBefore('2017-04-09 01:00:00', 'day');

两者都有效。


Here 是 isBefore 的签名。

【讨论】:

    【解决方案2】:

    moment(...) 参数接受“day”参数。

    相反,您应该使用 day 参数调用 isBefore(...),如下所示:

    moment(...).isBefore(moment(...), 'day'));
    

    更多信息可以在文档here找到。

    【讨论】:

      【解决方案3】:

      同样发现 chrome 和 safari 浏览器之间的问题,然后我发现,当日期与时区和微秒值时,safari 浏览器无法正确验证,然后我比较如下日期

      "2021-05-11 22:00:23"
      

      而不是使用带有微秒和时区的日期

      "2021-05-11 22:00:23.000 +0000"
      

      那么它对我来说很好用

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-01
        • 1970-01-01
        • 2019-10-30
        • 2015-04-11
        • 2022-01-25
        • 2019-12-22
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多