18

我一直在玩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

4

1 回答 1

38

您实际上根本不需要使用.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 DDformat ——这样,"2000 01 01"将正确地 "大于" "1900 12 31"。但是没有理由这样做 - 时间戳更直接。

最后,请注意:您实际上不需要使用.unix()- 的实例moment()将进行比较:

> past = moment().subtract("days", 1)
> now = moment()
> past < now
true
> past > now
false
于 2012-11-07T06:50:29.957 回答