处理Mongodb和Nodejs中Web应用程序中时区的日期

时间:2014-12-19 06:46:54

标签: javascript mongodb

我正在开发一个Intranet Web应用程序。此应用程序在美国,欧洲和亚洲使用。

从用户浏览器中的datepicker小部件中,我捕获日期,然后将其传递给我在美国服务器上运行的应用程序。

new Date().toISOString();

我正在使用JavaScript Date Object并将日期转换为UTC格式,然后将其传递到服务器以便存储在Mongo DB中。

存储空间正常。

然而,我接下来假设在捕获的时间前一小时向欧洲和亚洲的用户发送电子邮件提醒。

我对如何执行此操作感到困惑。

Mongo中的日期采用UTC格式。如何从数据库中检索所有文档,使其时间接近一小时(这样我就可以发出一个会触发提醒电子邮件的事件)。

为此写一个什么样的查询?

2 个答案:

答案 0 :(得分:0)

我不知道如何编写Mongo DB的实际查询,但这可能会有所帮助。

你可以:

  • 使用CRON作业每小时运行一次查询。
  • 当Query运行时,获取今天需要提醒的所有对象。
  • 对象需要将用户的时区存储在其中。
  • 使用Moment.js及其时区组件将捕获的时间转换为用户的时区。
  • 如果捕获的时间在下一个小时内,请发送电子邮件。

This post显示了如何使用moment.js和时区组件

答案 1 :(得分:0)

不确定您的寻求方式,但有两种选择。

您可以使用>进行检索&安培;&安培; < =基于crontab建议。

var now =  ISODate("2014-01-16T01:00:00.000Z");
var houragp = now - 1hr
db.collection.find({ "yourdate" : { $gt : hourago , $lte : now }  })

或者查看将日期缩减为组件的this aggregation。请注意,$ 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" },
         }
     }
   ]
)