在Meteor Mongo上添加,减去和比较日期和时间

时间:2015-07-18 05:10:43

标签: javascript node.js mongodb datetime meteor

我正在Meteor Mongo上运行一个集合,其中有一个名为last_activity的字段,另一个名为expire_date

在这种特殊情况下,我需要从last_activity是N小时前的那个集合中获取项目。

在第二种情况下,我必须保存距离创建时间(现在)N个月的expire_date

如何在Mongo / Meteor上添加或减去日期或时间(如果他们使用不同的方法我会很高兴,如果有人简单解释过)并与它们进行比较?

另外,当我们从数据库中获取内容时,哪一个是最佳选择?如果直接在Mongo上进行,我会节省一些处理时间吗?

3 个答案:

答案 0 :(得分:2)

您可以使用Moment.js以可读英语添加或减去时间。可以轻松安装Moment Meteor package

$ meteor add momentjs:moment

http://momentjs.com/docs/#/manipulating/add/

moment().add(Number, String);
moment().add(Duration);
moment().add(Object);

// For example, add 7 days from now:
moment().add(7, 'days');

生成正确的日期对象后,您可以将其保留在Mongo数据库中。

答案 1 :(得分:2)

这取决于您如何存储日期。你至少有两个选择。

Date.now()
1437215759517

new Date()
Date 2015-07-18T10:36:04.981Z

在第一种情况下,它是linux(unix)世界中某些特殊时间点的ms量:D 您可以轻松地将任何时间添加到现有的时间。例如:

1 week
7 * 1 days
7 * 24 hours
7 * 24 * 60 minutes
7 * 24 * 60 * 60 seconds
7 * 24 * 60 * 60 * 1000 ms

所以在你的代码中,你会有这样的事情(从现在开始一周):

expire_date = Date.now() + 7 * (24 * 60 * 60 * 1000)

是的。要以令人赏心悦目的格式显示此日期,我建议moment.js

Date.now()
1437216383841

moment(Date.now()).format('LL')
"July 18, 2015"

moment(Date.now() + 7 * (24 * 60 * 60 * 1000)).fromNow()
"in 7 days"

答案 2 :(得分:1)

将所有日期|时间存储在ISO中 - {createdAt:ISODate(" 2015-08-12T09:36:42Z")。 使用momentjs:

moment().toDate()
var currentDateInISO = moment().toDate()
posts.insert({createdAt: currentDateInISO});

比较2 ISODate:

var t1 = moment().toDate()
var t2 = moment().toDate()
moment(t1).isBefore(t2) // True

http://momentjs.com/docs/#/query/is-before/

玩得开心。