mongodb 时区问题及 Date 类型相关操作

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
  1. laravel 中的一个 mongodb 支持包,使用 composer 安装即可
  2. 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. 增
  1. 在对应 model 中,设置 CREATED_AT UPDATED_AT 设置为你需要的字段,即可自动生成时间类型;

这里要注意,此处的 model 要继承 Jenssegers\Mongodb\Eloquent\Model

  1. 如果除创建和更新外,想自定义插入一条时间记录,获取时间后插入,时间戳会被存为 int 类型,格式化后的时间会被存为 string 类型,如果需要 Date 类型,可以使用 fromDateTime 进行转化后在入库;
2. 查
  1. config/app.php 中的 timezone 设为 PRC 后 laravel 会自动处理查询出的时间;
  2. 对于自定义插入的一个 Date 类型字段,查出后会如下所示 {"$date":{"$numberLong":"1544544000000"}} ,想要正常格式化为可读时间格式,可在 model 中设置 protected $dates = ['自定义字段'];,即可对时间进行格式化。
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值