我想查找自午夜以来创建的所有文档,无论用户的时区如何。如果太平洋时间的用户,它应该显示自太平洋午夜以来的所有文件。与东部时间相同。
我在东部时间这对我有用:
var d = new Date();
var midnight = d.setHours(0,0,0,0); // last midnight
var count = Items.find({
username: Meteor.user().username,
createdAt: { $gt: midnight }
}).count();
但是我的客户是CST,但对他来说并不适用。它改为显示自中午前一天晚上10点或晚上11点以来创建的文档。所以这对我来说似乎是一个时区问题。
答案 0 :(得分:4)
假设这只是一个客户端问题(所有时间都以UTC格式存储在服务器上),那么您可以通过执行以下操作获得用户当前时区午夜的UTC调整时间:
var now = new Date();
var midnight = new Date(now.getFullYear(), now.getMonth(), now.getDate());
var midnight_utc = new Date(Date.UTC(now.getFullYear(), now.getMonth(), now.getDate()));
看到这个小提琴:https://jsfiddle.net/Lbk1vo0j/1/ 例如,对于我当前的时区(东部),我现在获得以下值,午夜和midnight_utc(使用toLocaleString()方法打印Date对象时):
3/30/2015, 3:06:39 PM
3/30/2015, 12:00:00 AM
3/29/2015, 8:00:00 PM
答案 1 :(得分:2)
尝试setUTCHours(0, 0, 0, 0);
。它获得的协调世界时间对每个用户都应该是相同的。
答案 2 :(得分:1)
我有类似的要求所以我确实使用了以下方法,
我正在使用的功能是
function objectIdWithTimestamp(timestamp){
// Convert string date to Date object (otherwise assume timestamp is a date)
if (typeof(timestamp) == 'string') { timestamp = new Date(timestamp); }
// Convert date object to hex seconds since Unix epoch
var hexSeconds = Math.floor(timestamp/1000).toString(16);
// Create an ObjectId with that hex timestamp
var constructedObjectId = ObjectId(hexSeconds + "0000000000000000");
return constructedObjectId
}
使用它
db.collection.find({_id:{$gte:objectIdWithTimestamp(Y/m/d H:i:s)}})
答案 3 :(得分:1)
我会建议您尝试moment库并解决时区问题。无论客户端代码何时执行,都要获取其最后的午夜时间,将其转换为UTC时间和时间。然后轻松从MongoDb检索信息。关于更多细节refer here
,很少有时刻库使用示例var str = "2013-12-01"
moment.tz(str, "America/Los_Angeles").format(); // 2013-06-01T00:00:00-07:00
moment.tz(str, "America/New_York").format(); // 2013-06-01T00:00:00-04:00
答案 4 :(得分:1)
从用户的角度来看,您可以从午夜开始获取会议记录。尝试使用它来查询服务器自x分钟前的更改。
var d = new Date();
console.log(d);
var now = d.getTime();
d.setHours(0,0,0,0);
var midnight = d.getTime();
var minutes_ago = Math.floor((now-midnight) / (60 * 1000));
console.log(minutes_ago);
输出:
Date {Thu Apr 02 2015 16:12:54 GMT-0700 (PDT)}
972
答案 5 :(得分:0)
这应该有效:
var d = new Date();
var midnight = d.setUTCHours(0,0,0,0); // last midnight everywhere
var count = Items.find({
username: Meteor.user().username,
createdAt: { $gt: midnight }
}).count();