時間時區錯誤修復moment

最近項目中,用戶反饋一個時間不正確,老闆讓我立即處理。具體現象如下:
第一個界面的時間
在這裏插入圖片描述
第二個界面的時間
在這裏插入圖片描述
發現一部分時間正確,一部分時間錯誤;正確的和錯誤的沒有順序。解決思路如下:

1、排除後端傳值錯誤

早上剛剛上班,我輸入了幾個數據和測試時間,前端界面顯示正常。我想可能不是前端的bug,應該是後端bug。

首先我看了一下後端的傳值(先看看是否是後端的問題,畢竟這個是數據錯誤),帶着一臉問號找後端,和後端同事協調後,結果發現後端的數據寫入正確,請求返回的數據正確(結果啪啪打臉)。

2、時區的問題

排除了原始數據的問題,我仔細對比數據差異。發現錯誤的數據中,分鐘和秒是正確的,但是小時不正確。是不是不同的客戶處於不同的時區(中國在東八區,美國和中國相差12小時)。我聯繫了不同的北京同事,他們的數據有的正確,有的不正確。

我們的時間使用第三方庫 moment.js 處理。查閱了詳細的官方文檔(http://momentjs.cn/),沒有發現配置的問題,這裏可以排除。這裏浪費了不少時間。

3、最終原因:時間格式

完全找不到問題,代碼邏輯看起來基本一樣,於是我把兩個源代碼一行一行對比分析,發現了下面的問題。

 // 一個界面
 let time = moment(value).format('YYYY-MM-DD hh:mm:ss');
 // 另一個界面
 let time = moment(value).format('YYYY-MM-DD HH:mm:ss');

第一眼看起來沒問題(在上千行的代碼中基本沒差別),首先用 moment 處理一下傳值,然後格式化一下輸出,輸出都是按照年月日時分秒輸出。

仔細對比找到了問題,一個是 “HH” 一個是 “hh”。查閱官方文檔,是12小時格式和24小時格式原因(下午八點和20點的區別),這樣問題基本找出來了。

我測試時是上午,12小時和24小時制度下時間是正確的;如果是下午和晚上的數據,那麼時間轉換就錯誤了。我們的界面上沒有標明上午或者下午,所以兩個時間就出錯了。問題解決!把兩個地方的時間格式改成相同,然後界面就是正確的了。

查看源碼,發現這兩個界面是不同的同事寫的,可能沒有及時溝通,或者是手誤,造成格式化錯誤。

修復了這個問題後,下午測試,時間正確。這個問題終於解決了。

總結

moment 這個庫很複雜。如果遇到國際的業務,需要不用時區時間格式,一定仔細閱讀文檔,做好測試,避免上面的錯誤,否則數據錯誤就是很嚴重的問題。

大家日常還遇到過什麼時間的問題,歡迎補充交流。

下面是我的其他相關文章,大家可以多多交流!

Web前端開發標準規範總結
最全面計算機英語單詞列表
CSS-界面滾動時不顯示滾動條
React中loading界面處理
Cannot read property innerHTML of null 報錯信息
React中獲取元素位置
JavaScript暫停函數(SLEEP函數)
使用 Python 自動生成 HTML

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章