javascript - 使用 Moment.js 比较时间

标签 javascript date momentjs

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

相关文章:

datatables - 当日期是链接时,使用 moment.js 对日期进行排序不起作用

javascript - 为 jQuery Mobile 设置大小?

javascript - Angular Directive(指令)忽略非数字输入

javascript - 无法使用 mongodb 读取未定义的 MVC 模型 Web 服务的属性

linux - 从 systemd bash 内联脚本创建 filename_$(date %Y-%m-%d)

javascript - 使用 javascript 查找今天日期中的第四个星期五

ruby - Date::today 未定义?

jquery - 如何在日期范围选择器中的日期单元格上添加自定义标题

javascript - 如何将 112889 (mmddyy) 转换为 11/28/89 或 11/28/1989

javascript - 更简单的写法 : if (routine ! == null &&routine.exercises !== undefined &&routine.exercises.length > 0)