【问题标题】:Storing dates in mongodb format以 mongodb 格式存储日期
【发布时间】:2014-05-09 11:07:16
【问题描述】:

我的应用程序有几个日期选择器,我使用日期格式作为 DD/MM/YYYY 然后我将此日期发送到我的 nodejs 后端,该后端将数据对象存储在 mongodb 中。

将来我的应用程序需要根据日期范围过滤数据。出于这个原因,我不想将日期存储为字符串。相反,我想以允许我对集合执行基于范围的查询的格式存储它们。

考虑到我无法在前端更改日期格式,我最好的选择是什么?

如果有人能提供详细的答案,让我清楚地理解这个概念,我将不胜感激。

【问题讨论】:

  • 为您选择的语言实现使用本机日期对象,它们将正确序列化到 MongoDB。文档中说得很清楚。

标签: javascript node.js mongodb date


【解决方案1】:

在您的 nodejs 后端,您可以将字符串日期“DD/MM/YYYY”转换为 Date 对象,然后再将其放入 mongodb。像这样:

var dateStr = "15/12/2013";   // the 15th of Dec, 2013
var dateArr = dateStr.split('/');

// new Date(YYYY, MM, DD); // note that month starts from 0, so
// you have to subtract 1
var date = new Date(dateArr[2], dateArr[1] - 1, dateArr[0]);
console.log(date);  // output: Sun Dec 15 2013 00:00:00 GMT-0800 (PST)

这个日期现在是一个 Date 对象,您可以将其保存在 mongodb 中,并在以后需要时按日期范围查询

【讨论】:

  • 嘿,谢谢您的回复。如果我还需要以以下格式节省时间,我该怎么做:05/22/2014 12:00 PM ??
  • 你可以这样做: var dateArr = dateStr.split(' '); var dateParts = dateArr[0].split('/'); var timeParts = dateArr[1].split(':'); var amPm = dateArr[2]; var date = new Date(dateParts[2], dateParts[1] - 1, dateParts[0], timeParts[0] + (amPm === 'PM' ? 12 : 0), timeParts[1]);跨度>
  • 我尝试了您建议的方法,检索后,我得到以下日期:2015-10-12T19:08:00.000Z。现在我如何将其转换回原始形式。另一个问题是,我不明白从 2014 年变成了 2015 年。如果不是很麻烦,你能解释一下吗?
  • 当你从数据库中查询时,你得到了 Date 对象,所以你可以这样做: var dateStr = date.getDate() + '/' + date.getMonth() + '/' + date. getFullYear() + ' ' + date.getHours() + ':' + date.getMinutes() + ' ' + (date.getHours() >= 0 ? 'PM' : 'AM');对于年份问题,不确定,在将其保存到数据库之前打印出值,看看你得到了什么......还检查数据库本身以查看数据库中的年份
  • 如果您的客户端使用 javascript,您可以转换您的 Date() 对象 JSON 字符串 (date.toJSON()) 并将其发送到服务器。然后在 node.js 中,你只需要这样做: var date = new Date(toJSONStringDateFromClient);这会将其转换为日期对象并准备好放入数据库
猜你喜欢
  • 1970-01-01
  • 2018-11-09
  • 1970-01-01
  • 2020-04-19
  • 1970-01-01
  • 1970-01-01
  • 2013-06-16
  • 1970-01-01
  • 2012-09-06
相关资源
最近更新 更多