如何在MongoDB中建模和查询办公时间(日期、时区、dst)
How to model and query Office Hours in MongoDB (dates, timezones, dst)
每周办公时间:周一、周五、周五上午10点->上午11:45
我想跟踪一组人的办公时间。当他们的时间开始时,我想setSign('open')
。当它们结束时,setSign('closed')
这种模式显然已被打破。在MongoDB中,如何在尊重时区的情况下进行建模和查询是个问题。
people.find({});
[{
name: 'hank',
days: [1,3,5], // mon,wed,fri
start: '08:00',
end: '17:00,
lastSign: 'new',
}]
所以,每5分钟,我运行一个查询:
var hoursNowOpen = people.find({
lastSign: { $ne: 'open' },
????
});
// Set to open
hoursNowOpen.forEach(function(person) { person.setSign('open');});
// Mark we set the sign to open
var ids = hoursNowOpen.map(function(person) { return person._id;});
people.update({_id: {$in: ids}}, { lastSign: 'open' });
我非常讨厌时区和dst。谢谢你的帮助!
Mike
模型中唯一缺少的是时区标识符,如America/New_York
或Asia/Tokyo
,假设每个人可能在不同的时区。如果它们都在同一时区,那么您只需要在应用程序逻辑中知道该时区。
但是,这对查询没有帮助。为此,您必须将每个事件投影为一组基于UTC的日期+时间值。总有一个折衷方案。如果你的人数相对较少,你可以将他们全部加载,并根据规则测试当前日期。
如果你有很多人,那么你肯定需要定期预测每个事件,这样你就可以根据当前UTC时间进行简单的范围查询,看看谁是开放的。
相关文章:
- 更改angularjs中的日期-时间格式
- 将日期时间作为 JSON 发送将无法在我的视图中正确显示
- 将日期时间从json转换为可读格式
- 使用时刻.js从日期时间中提取时间
- 两个日期时间选择器
- Javascript:如何在onChange事件期间更改日期时间值
- .Net webApi ISO日期时间和IE8
- Javascript-如何使用bootstrap日期时间选择器自动计算两个时间输入之间的差异
- 转换日期时间格式
- 在JavaScript中转换日期/时间格式
- JavaScript JSON关联对象键和值都作为日期时间戳
- 将日期时间javascript绑定到表列
- 将JS日期解析为C#日期时间
- 使用JavaScript将客户端日期/时间字符串转换为JSON日期/时间串
- 从javascript数组获取php的日期时间
- 格式化momentjs日期时间
- 这个正则表达式的日期/时间有什么问题
- Mongoose查询在两个日期时间之间提取数据
- 当转换为Python日期时间时,Node的时间戳落后3分钟
- 自定义angularjs过滤器日期时间格式额外字符