我一直在玩Moment.js我遇到了一个问题。我一直在尝试确定给定的日期是过去还是将来。日期存储为 Unix timestamps .因此,当我将 future 日期与当前日期进行比较时,它工作正常,但它不会触发过去的日期。示例代码如下和 fiddle is here .
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
?
最佳答案
您实际上不需要使用 .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
关于javascript - 使用 Moment.js 比较时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13264457/