• mongodb中时间跟实际时间相差8小时----时区问题


    遇到的问题

    参考:mongo中时间跟实际时间相差8小时

    Mongo中一个Collection有一个字段用来存放数据的插入时间,但记录的时间比实际时间晚了8小时。

    查询得知存储在mongodb中的时间是标准时间UTC +0:00,而中国时区是+8.00,

    请问有什么办法保证Collection中的插入时间和实际时间一致吗?

    GMT: 格林威治时间
    UTC:标准时间
    ISO: 标准时间
    CST:北京时间
    时间加Z:代表标准时间(一般和UTC时间一致)

    enterDate: {
        type: Date,
        default: new Date()
    } 
    

    解决方法参考:

    • 應該要在應用層處理這個問題比較好,資料庫裡面都統一存 UTC 這樣才不會造成跨時區用戶插入資料的時間差異,多加一個 Timezone 欄位來克服。
    • 存 timestamp 也不錯.. 不過也是要依據時區轉

    确定解决思路:

    在应用层修改好数据,避免在数据库中直接使用Date类型。

    实际解决方案1:设置集合规则为字符串格式

    enterDate: {
        type: String,
        default: new Date().toString()
    } 
    

    实际解决方案2:设置集合规则为数字格式----存储为时间戳(推荐使用方案2,这样不同国家的人访问时不会出现时区问题)

    enterDate: {
        type: Number,
        default: Date.now
    }
    

    注意:通过页面中添加学生信息时,如果没有填写enterDate,它的值是 '' 一个空字符串。

    要在存储数据前,手动修改它的值。

    if (studentData.enterDate === '') {
        // studentData.enterDate = Date.now();
        studentData.enterDate = new Date().toString();
    }
    

    以上两种方案任选其一

    再在art-template解析中,使用monment第三方模块解析时间:

    1. 安装第三方模块:npm install moment

    2. 引入monment第三方模块

      const moment = require('moment');
      // 导入模板变量moment
      template.defaults.imports.moment = moment;
      
    3. 在模板中使用moment

      <td>{{ moment($value.enterDate).format('YYYY-MM-DD hh:mm:ss') }}</td>
      
  • 相关阅读:
    JVM | JVM的核心技术
    性能测试 | 服务器CPU使用率高分析实例
    VIM | vim操作大全
    数据库 | SQL查询&LIMIT的用法
    性能测试 | Linux系统top命令中的io使用率,很多人都误解了它的具体含义
    团队游戏的那些事
    细说内测
    PropertyPlaceHolderConfigurer中的location是不是用错了?
    foreach写失效的问题
    如何优雅的写单元测试?
  • 原文地址:https://www.cnblogs.com/jeacy/p/13522744.html
Copyright © 2020-2023  润新知