首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用Moment.js比较时间

使用Moment.js比较时间
EN

Stack Overflow用户
提问于 2012-11-07 14:43:41
回答 1查看 24.9K关注 0票数 18

我一直在尝试使用Moment.js,我遇到了一个问题。我一直在尝试确定一个给定的日期是过去的还是将来的。日期以Unix timestamps格式存储。因此,当我比较未来日期和当前日期时,它工作正常,但它不会触发过去的日期。下面是示例代码和一个fiddle is here

代码语言:javascript
复制
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 not yay 2。谁能给我解释一下为什么它不记录yay 2

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-07 14:50:30

为此,您实际上根本不需要使用.format()

首先,时间戳应该是数字,而不是字符串(例如,var pastUnixTime = 1348812970;);其次,您可以直接比较它们:

代码语言:javascript
复制
> 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()的实例将进行比较:

代码语言:javascript
复制
> past = moment().subtract("days", 1)
> now = moment()
> past < now
true
> past > now
false
票数 37
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13264457

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档