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>
    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM