返回午夜后创建的文档
Return documents created since midnight
我想查找自午夜以来创建的所有文档,而不考虑用户的时区。如果用户在太平洋时间,它应该显示自太平洋午夜以来的所有文档。与东部时间相同。
我在东部时间,这对我很有用:
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点以来创建的文档。所以这对我来说似乎是一个时区问题。
假设这只是一个客户端问题(所有时间都存储在服务器上的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/例如,对于我当前的时区(东部),我得到了现在、午夜和午夜_utc的以下值(当使用toLocaleString()方法打印Date对象时):
3/30/2015, 3:06:39 PM
3/30/2015, 12:00:00 AM
3/29/2015, 8:00:00 PM
尝试setUTCHours(0, 0, 0, 0);
。它得到的协调世界时应该对每个用户都是一样的。
我有类似的要求,所以我使用了以下方法,
- 创建了将datetime映射到_id的函数
- 用那个id获取我的数据
我使用的功能是
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)}})
我会建议您尝试moment库并解决时区问题。在执行任何客户端代码的地方,获取其最后一个午夜时间,将其转换为UTC时间&然后轻松地从MongoDb中检索信息。少数时刻库使用示例,有关更多详细信息,请参阅此处
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
午夜后的分钟数
您可以从用户的角度获取自午夜以来的分钟数。请尝试使用它查询服务器以了解自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
这应该有效:
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();
相关文章:
- 从Javascript和Php变量创建Html模板文档
- 从Google Analytics文档中重新创建滚动效果
- 返回午夜后创建的文档
- 为任意html文档创建不引人注目的覆盖
- 如何将文档对象创建为HTML页面
- 创建自己的文档Javascript
- 聚合以按大小创建文档组
- 挂钩文档.使用函数原型创建元素
- 检查文档是否已经存在,如果是则更新,否则创建新的Mongoose
- 如何通过Google Drive Javascript OAuth2 API创建Google Sheets文档
- Mongoose创建一个文档,如果找不到指定的字段,则更新文档中的数组
- 从xmldocument创建javascript文档
- 如何删除创建的创建文档片段对象
- 如何根据文档创建AngularJS控制器
- 使用Javascript和可编辑文档创建内容助手(ctrl+space)
- 文档创建完整元素
- XPage ajax文档创建
- 通过Json文档创建超链接
- 使用XPages从dataTable中的选定文档创建响应文档
- 用文档创建元素.createElement留在内存中