在 Mongo 和 Nodejs 的 Web 应用程序中处理跨时区的日期
Handling date across timezones in web-application in Mongo and Nodejs
我正在开发一个内联网Web应用程序。此应用程序在美国,欧洲和亚洲使用。
从用户浏览器中的日期选择器小部件中,我捕获日期,然后将其传递给在美国服务器上运行的应用程序。
new Date().toISOString();
我正在使用JavaScript日期对象并将日期转换为UTC格式,然后将其传递给服务器以存储在Mongo DB中。
存储工作正常。
但是,我接下来应该在捕获时间前一小时向欧洲和亚洲的用户发送电子邮件提醒。
我对应该如何执行此操作感到完全困惑。
Mongo 中的日期采用 UTC 格式。如何从数据库中检索所有文档,使它们的时间接近一小时(以便我可以发出一个事件,该事件将触发提醒电子邮件(。
为此编写什么样的查询?
我不知道
如何为 Mongo DB 编写实际的查询,但也许这会有所帮助。
您可以:
- 使用 CRON 作业每小时运行一次查询。
- 当查询运行时,获取今天需要提醒的所有对象。
- 对象中需要存储用户的时区。
- 使用Moment.js它的时区组件将捕获的时间转换为用户的时区。
- 如果捕获的时间在下一小时内,请发送电子邮件。
这篇文章展示了如何使用moment.js和时区组件
不确定你到底在寻求什么,但有两个选择。
您可以按照建议在 crontab 的基础上使用> &&<= 进行检索。
var now = ISODate("2014-01-16T01:00:00.000Z");
var houragp = now - 1hr
db.collection.find({ "yourdate" : { $gt : hourago , $lte : now } })
或者,查看此聚合,它将日期缩减为组件。请注意,键$yourdate的美元符号是一个聚合习惯用法。
db.sales.aggregate(
[
{
$project:
{
year: { $year: "$yourdate" },
month: { $month: "$yourdate" },
day: { $dayOfMonth: "$yourdate" },
hour: { $hour: "$yourdate" },
minutes: { $minute: "$yourdate" },
seconds: { $second: "$yourdate" },
milliseconds: { $millisecond: "$yourdate" },
dayOfYear: { $dayOfYear: "$yourdate" },
dayOfWeek: { $dayOfWeek: "$yourdate" }
}
}
]
)
您的情况可能只需要。
db.sales.aggregate(
[
{
$project:
{
hour: { $hour: "$yourdate" },
}
}
]
)
相关文章:
- 可以't让我的if语句处理js中的html表单输入
- keyup事件处理程序更改焦点不适用于快速键入
- 如何使用jquery处理php循环通过元素
- angular.js没有'无法在PhoneGap中处理视图标记
- Webpack/Rect:遵循egghead.io教程,但出现错误:您可能需要一个合适的加载程序来处理此文件类型
- 处理多时区
- 使用 Javascript 处理时区的最佳方法是什么?
- 在 Mongo 和 Nodejs 的 Web 应用程序中处理跨时区的日期
- 如何处理夏令时时区偏移量
- 在 JavaScript 中对日期输入进行单元测试处理,而不考虑时区
- 在倒计时插件中处理时区
- 如何处理服务器和客户端之间的时区
- 应该如何正确处理不同时区的日期
- 如何在JavaScript中处理夏令时和时区
- Javascript处理不同时区的夏令时
- 处理Javascript日期的时区
- 时区混淆处理javascript在php中生成的日期
- 是否有一个jQuery日期格式化插件,可以处理多个时区和适当的夏令时
- 在javascript中处理日期(格式和时区)
- 我如何处理时区/偏移时,显示&;post &;;来自不同的用户