zoukankan      html  css  js  c++  java
  • 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>
      
  • 相关阅读:
    二进制&bitset(未完成)
    Python接口测试课程(第四天)-接口测试框架实现
    Python接口测试课程(第三天)-接口安全验证,参数化及断言
    Python接口测试课程(第二天)-接口测试快速实践
    {title}
    Python自动化测试面试题-接口篇
    Python自动化测试面试题-Selenium篇
    unittest使用signal信号量
    Selenium使用ChromeOptions启动参数
    Selenium执行Javascript脚本使用参数和返回值
  • 原文地址:https://www.cnblogs.com/jeacy/p/13522744.html
Copyright © 2011-2022 走看看