我正在Meteor Mongo上运行一个集合,其中有一个名为last_activity
的字段,另一个名为expire_date
。
在这种特殊情况下,我需要从last_activity
是N小时前的那个集合中获取项目。
在第二种情况下,我必须保存距离创建时间(现在)N个月的expire_date
。
如何在Mongo / Meteor上添加或减去日期或时间(如果他们使用不同的方法我会很高兴,如果有人简单解释过)并与它们进行比较?
另外,当我们从数据库中获取内容时,哪一个是最佳选择?如果直接在Mongo上进行,我会节省一些处理时间吗?
答案 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/
玩得开心。