Hir*_*esh 17 javascript date momentjs
我一直在玩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');
}
?
Run Code Online (Sandbox Code Playgroud)
上面的代码记录yay不是没有yay 2.任何人都可以向我解释为什么不记录yay 2?
Dav*_*ver 36
实际上你根本不需要使用.format()它.
首先,时间戳应该是数字,而不是字符串(ex,var pastUnixTime = 1348812970;),其次,您可以直接比较它们:
> pastUnixTime = 1348812970;
> pastUnixTime < moment().unix()
true
> pastUnixTime > moment().unix()
false
Run Code Online (Sandbox Code Playgroud)
现在,您的代码失败的原因是,当您比较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
Run Code Online (Sandbox Code Playgroud)