您的位置:首页 > 数据库 > Mongodb

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

2019-03-25 16:56 1296 查看

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 = ['自定义字段'];
    ,即可对时间进行格式化。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: