mongodb中時間跟實際時間相差8小時----時區問題
阿新 • • 發佈:2020-08-18
遇到的問題
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第三方模組解析時間:
-
安裝第三方模組:
npm install moment
-
引入monment第三方模組
const moment = require('moment'); // 匯入模板變數moment template.defaults.imports.moment = moment;
-
在模板中使用moment
<td>{{ moment($value.enterDate).format('YYYY-MM-DD hh:mm:ss') }}</td>