我是NodeJS和mongoDB的新手,我在打印Date对象的值时创建了一个变量,它打印这个
2021-08-06T00:00:00.000+00:00
并以这种格式存储在数据库中。但我想像这个2021-08-06
一样存储它。我试着这样
var date = new Date().toISOString();
date1 = date.substring(0, 10);
console.log("date")
console.log(date1);
它的输出是这个
date
2021-08-06
当我把这个变量传递到日期字段时,就像这个
document.Date = date1;
它以2021-08-06T00:00:00.000+00:00
的形式插入数据库
请帮助解决此问题。
它以这种格式插入数据库2021-08-06T000:00:00.000+000:00
实际上,像{_id:ObjectId(), dt: Date("2021-08-06")
这样的文档是以这种格式插入数据库的(请参阅bsonspec.org):
00000000: 2200 0000 075f 6964 0061 0dd3 1dfd af14 "...._id.a......
00000010: db18 d4f9 6109 6474 0000 6cc2 187b 0100 ....a.dt..l..{..
00000020: 0000
那里的日期值是64位整数:
hex: 0x000017b18c26c00
decimal: 1628208000000
这也是MongoDB服务器返回给您正在使用的任何客户端程序的格式。
Node.js驱动程序识别出这是一个日期类型,因此可以使用Date
构造函数来帮助反序列化该值,例如:
new Date(1628208000000)
从REPL中尝试一下,你会发现实际上是Node提供了你所看到的格式:
从mongo外壳来看,这看起来像:
> new Date(1628208000000)
ISODate("2021-08-06T00:00:00Z")
JSON没有日期类型,因此转换会导致该值变成字符串:
> tostrictjson({dt:new Date(1628208000000)})
{ "dt" : { "$date" : "2021-08-06T00:00:00.000-00:00" } }
同样,产生您所看到的格式的是客户端,而不是数据库。
如果您需要以特定格式显示日期,请使用日期格式库,如Datejs、Moment.js、Luxon等。