MongoDB 基础系列七:数据建模之特殊情况四,时间类型

前言

此篇博文是 Mongdb 基础系列之一;主要介绍 MongoDB 的数据建模相关内容;

本文为作者的原创作品,转载需注明出处;

Model Time Data

MongoDB 始终在服务器端以 UTC 的方式来存储时间,既是以格林威治时区为基准来存储时间,任何本地时区的时间都会被转换为 UTC 的时间格式进行存储;所以在存储 local time 的时候,务必存储时区信息,当在使用 local time 的时候,需要经过时区信息进行转换;

比如,我们有下面这个例子,

通过 MongoDB shell 来同时存储 current date 和客户端的时区差 offset (基于 UTC),注意,通过 now 进行存储的时候,MongoDB 将会将该字段值转换为 UTC;

1
2
3
var now = new Date();
db.data.save( { date: now,
offset: now.getTimezoneOffset() } );

然后,你就可以通过 offset 来获取得到当时的 local time 了,

1
2
var record = db.data.findOne();
var localNow = new Date( record.date.getTime() - ( record.offset * 60000 ) );

References

https://docs.mongodb.com/manual/applications/data-models-applications/