遇到的問題
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>