【问题标题】:How to do a greater than or equal to with moments (moment.js) in javascript?如何在javascript中使用moment(moment.js)做大于或等于?
【发布时间】:2015-02-04 06:36:27
【问题描述】:

基本上,我想做一个myMoment >= yourMoment。没有myMoment.isSameOrAfter 并结合isSame.isAfter 写出来有点冗长。

还有什么选择?将 moment 转换为 js 日期并使用>= 进行比较?

【问题讨论】:

  • 你试过 if(!moment1.isBefore(moment2)) 吗?
  • @Donal - 我在 chrome 中调试并注意到 myMoment == yourMoment 是假的,但 myMoment.isSame(yourMoment) 是真的。
  • @donal JavaScript 不支持运算符重载,因此像 和 >= 这样的关系运算符实际上是在进行引用比较。因此,如果它“有效”,那完全是个意外,因为它比较了这些复杂对象的原始值。
  • @JohnZabroski 这不正确,JS 使用 valueOf 原型方法进行比较,因此 >、>=、
  • @JohnZabroski 我再说一遍,在 Moment.js 的情况下,它保证是一个数字:momentjs.com/docs/#/displaying/unix-timestamp-milliseconds,另见stackoverflow.com/questions/22600856/…

标签: javascript date datetime momentjs


【解决方案1】:

可以在momentjs中使用isSameOrAfter方法:

moment1.isSameOrAfter(moment2);

【讨论】:

  • 仅在moment.js 2.10.7+版本中可用
  • 仅供参考:isSameOrBefore 也可用
【解决方案2】:

好的,我刚用了 moment.js .diff() function.

myMoment.diff(yourMoment) >= 0

足够接近。

【讨论】:

  • “足够接近”是什么意思?这完全是正确的行为。如果你想要 isOnOrAfter,只需在 Moment 原型中添加一个函数即可。
  • 值得一提的是 diff 以毫秒为单位返回差异,所以如果你想通过说 next week is diff(yourMoment) >= 7 来扩展它,你将失败。另外,不要只在一天中添加毫秒,因为时区等会搞砸你。
  • 跟进@NickSteele 的评论,您可以通过第二个参数将其用于不同的时间度量。例如:(myMoment.diff(yourMoment, 'minutes') >= 15) 或 (myMoment.diff(yourMoment, 'days') >= 7)
【解决方案3】:
let A = moment('2020-01-02');
let B = moment('2020-01-01');
let C = moment('2020-01-03');
console.log(A.diff(B, 'days'));// => 1
console.log(A.diff(C, 'days'));// => -1

支持的度量是年、月、周、日、小时、分钟和秒momentjs.com

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 1970-01-01
    • 2013-09-01
    • 2014-11-09
    • 2012-01-10
    相关资源
    最近更新 更多