比较时报使用Moment.js(Comparing Times Using Moment.js)

2019-07-03 15:04发布

我一直在玩弄Moment.js和我遇到的一个问题。 我一直在试图找出给定日期是否是在过去还是在未来。 该日期存储为Unix的时间戳 。 所以,当我比较将来的日期与当前的日期,它的工作好,但它不会触发对过去的日期。 示例代码低于和小提琴是在这里 。

var pastUnixTime = '1348812970'; //some time in the past
var futureUnixTime = '1352350231';

if (moment.unix(futureUnixTime).format('DD MM YYYY') > moment().format('DD MM YYYY')) {
    console.log('yay');
}


if (moment.unix(pastUnixTime).format('DD MM YYYY') < moment().format('DD MM YYYY')) {
    console.log('yay 2');
}
​

上面的代码日志yay不不yay 2 。 任何人都可以向我解释为什么它不记录yay 2

Answer 1:

你其实并不需要使用.format()在所有这一点。

首先,时间戳应该是数字,而不是字符串(例如, var pastUnixTime = 1348812970;和第二,你可以直接对它们进行比较:

> pastUnixTime = 1348812970;
> pastUnixTime < moment().unix()
true
> pastUnixTime > moment().unix() 
false

现在,你的代码失败的原因是,当你比较DD MM YYYY的字符串,它们被字典顺序比较......天真是第一个 ! 因此字符串"01 01 2000"将永远是“小于” "31 12 1900" 。 如果你比较字符串,你可以使用YYYY MM DD格式-这样, "2000 01 01"将是正确的“大于” "1900 12 31" 。 但是,没有任何理由这样做 - 时间戳是更直截了当。

最后要说明的:你实际上并不需要使用.unix() -的情况下, moment()会比较理智:

> past = moment().subtract("days", 1)
> now = moment()
> past < now
true
> past > now
false


文章来源: Comparing Times Using Moment.js