mongoDB 的默认时区为 UTC(协调世界时),和我们的当前时区相差八个小时,所以当我们插入当前时间,之后使用
find()
查询时会发现有异常,使用时需要注意。
Robo3T
Robo3T 是 mongodb 的可视化工具,默认情况查询数据会显示 UTC;
可以通过修改 Display Dates in ...
选项,选择 Local Timezone
重新查询即为当前时区时间。
mongo shell
命令行下可以通过 get
函数获取当前时区时间
使用 a = db.zhangcong.findOne({"name":"test1"}).create_at
获取到时间字段,再使用 a.getHours()
即为当前时区的小时数字
暂时没有查到如何直接获取完整的当前时区的时间格式
laravel
1. jenssegers/mongodb
- laravel 中的一个 mongodb 支持包,使用 composer 安装即可
- 在
config/database.php
中配置 mongo 的信息
'mongodb' => array( //MongoDB
'driver' => 'mongodb',
'host' => '127.0.0.1', //数据库服务器的ip
'port' => 27017, //数据库服务器上mongodb服务对应的端口
'database' => 'test', //数据库名称
'username' => '',
'password' => '',
'options' => array(
'database' => 'test' // 要使用的数据库
)
),
4. date 相关
1. 增
- 在对应 model 中,设置
CREATED_AT
UPDATED_AT
设置为你需要的字段,即可自动生成时间类型;
这里要注意,此处的 model 要继承 Jenssegers\Mongodb\Eloquent\Model
- 如果除创建和更新外,想自定义插入一条时间记录,获取时间后插入,时间戳会被存为
int
类型,格式化后的时间会被存为string
类型,如果需要Date
类型,可以使用fromDateTime
进行转化后在入库;
2. 查
- 将
config/app.php
中的timezone
设为 PRC 后 laravel 会自动处理查询出的时间; - 对于自定义插入的一个
Date
类型字段,查出后会如下所示{"$date":{"$numberLong":"1544544000000"}}
,想要正常格式化为可读时间格式,可在 model 中设置protected $dates = ['自定义字段'];
,即可对时间进行格式化。