1

我正在尝试以 mm/dd/YYYY 格式存储日期以实现我尝试在 mongoShell 中执行以下操作

dt=new Date(2012,01,01)
ISODate("2012-01-31T18:30:00Z")

这不是我想要的格式。我正在尝试将其存储为 ISODate("2012-01-01") 以便我可以使用 between , greater than less than 那种比较从 mongoDB 中获取我想要的数据。

4

2 回答 2

1

一种可能的解决方案是以以下格式存储

{
  year : 2016,
  month: 1,
  day: 1,
  yymmdd : 20160001
}
{
  year : 2015,
  month: 10,
  day: 20,
  yymmdd : 20151020
}

yymmdd
年乘以 10,000
月乘以 100 并加上日期

所以 Jan - 1 2016 将是 2016x10000 + 0x100 +1 = 20160001
Nov-20 2015 将是 2015x10000 + 10*100 + 25 = 20151025

等等

上述设计可以实现从 0AD 到 9999AD 的排序

日期是一个 64 位整数,所以如果您使用 yyyymmdd 样式(如上),它是一个 32 位整数,可以节省您的空间并服务于您的目的

于 2016-05-18T12:24:08.130 回答
0

听起来您的问题是关于如何将存储在 Mongo 中的 ISO 日期转换为字符串。我相信您可以为 Java 制定正确的语法,但是在 Mongo shell 中,您可以像这样简单地做到这一点:

> d=new Date(2012,01,01)
ISODate("2012-02-01T05:00:00Z")
> print ( d.getFullYear()+"/"+d.getMonth()+"/"+d.getDate() )
2012/1/1

但请注意,您返回的是传递给 Date 的数字,而不是反映月份的数字。要解决这个问题,您可以使用d.toLocaleDateString()

> d.toLocaleDateString()
02/01/2012

这是因为 JavaScript Date 函数需要(并返回)从 0 开始的月份,并且您还需要确保注意相对于 UTC/GMT 时区的时区。

于 2012-11-22T20:29:49.553 回答