最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Moment的feature導致線上bug解決分析

 更新時間:2022年09月21日 14:21:28   作者:OJAccepted  
這篇文章主要為大家介紹了Moment的feature導致線上bug解決分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪

bug的出現(xiàn)

這一天,本來是平平淡淡的一天,我正準備一如既往的到點下班,結(jié)果qa說線上出了個匪夷所思的bug。

表象為:用戶在日期選擇器選擇了1964-01-01之后,自動變成了1963-12-31

我心里想:這是什么神奇bug,于是我又嘗試了一下選擇1964-01-02、1963-12-31、1965-01-01、1963-01-01,結(jié)果都正常,那么到底是為什么會引發(fā)這個bug呢?

bug排查

由于后端把時間、日期類的字段都定義為了時間戳,因此前端是有進行一些處理的,可以看下面這個圖

從接口中拿到時間戳后,會先存到內(nèi)存中,格式化后傳入antd日期選擇器中。每當用戶選擇日期之后,我會截取日期中的年月日,然后使用moment-timezone去獲取到雅加達(印尼首都)當天零點的時間戳,存儲到內(nèi)存中,當用戶點擊提交的時候,這個時間戳就會被提交到后端去

再來看一下用戶選擇日期后進行處理的代碼

import momentTimeZone from 'moment-timezone';
import moment from 'moment';
import type { Moment } from 'moment';
convert = (value?: Moment | null) => {
        if (value) {
          const valueString = momentTimezone.tz(value.format('YYYY-MM-DD'), 'Asia/Jakarta').format();
          return (moment(valueString).valueOf() / 1000).toFixed();
        }
        return value;
      }

bug的根因

乍一看,沒什么問題呀,于是我開始斷點,腦溢血的一幕出現(xiàn)了,大家可以去momentjs.com/timezone/do… 這個頁面上試一試,百分百復(fù)現(xiàn)

// 讓人大吃一驚的等式
moment.tz('1961-01-01', 'Asia/Jakarta').format() === '1963-12-31T23:30:00+07:00';

這怎么轉(zhuǎn)換之后,日期還給我整錯了呢?我的第一反應(yīng)就是給moment-timezone提issue,結(jié)果沒想到有人趕在了我的前面 github.com/moment/mome…

官方也解釋的很清楚了:由于當?shù)貧v史原因,雅加達在1964年之前都是按東七半?yún)^(qū)來計算時區(qū)的,1964年開始才按照東七區(qū)來計算,總的來說,這個匪夷所思的等式居然是個feature,只是我使用之前沒有了解清楚,所以出了bug,這鍋是甩不掉了

解決方案

經(jīng)過一系列的討論,我們認為其實日期類型的字段用時間戳表達是不準確的,比如元旦這個節(jié)日,在全世界任何一個地區(qū)都應(yīng)該是1月1日,可是如果用時間戳表達的話,可能在某些地區(qū)的確是1月1日,但是在其他地區(qū)卻可能是1月2日了,因此正確的設(shè)計應(yīng)該是用日期字符串來進行存儲和傳輸,比如"2022-01-01",這樣才能避免類似的bug,于是前端、app和be都進行了對應(yīng)的修改,并且發(fā)布了hotfix

雖然影響范圍比較小,但是眾所周知蝦皮對于質(zhì)量是看的很重的,特別是線上的質(zhì)量。。。只是可惜了我的績效。。

好了以上就是Moment的feature導致線上bug解決分析的詳細內(nèi)容,更多關(guān)于Moment feature線上bug的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • JS面試之異步模擬超時重傳機制詳解

    JS面試之異步模擬超時重傳機制詳解

    這篇文章主要為大家介紹了JS面試之異步模擬超時重傳機制詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-10-10
  • 微信小程序 地圖map詳解及簡單實例

    微信小程序 地圖map詳解及簡單實例

    這篇文章主要介紹了微信小程序 地圖map詳解及簡單實例的相關(guān)資料,需要的朋友可以參考下
    2017-01-01
  • 用JS創(chuàng)建一個錄屏功能

    用JS創(chuàng)建一個錄屏功能

    這篇文章主要介紹了利用JS創(chuàng)建一個錄屏功能,創(chuàng)建這個功能錢我們首先創(chuàng)建一個HTML文件,包含記錄按鈕和一個播放標簽,下面來看看創(chuàng)建的詳細過程
    2021-11-11
  • JavaScript 中的文檔對象模型 DOM

    JavaScript 中的文檔對象模型 DOM

    DOM,即文檔對象模型,前端開發(fā)工程師必學的基礎(chǔ)知識,在本文將介紹如何在 HTML 文檔中選擇元素、如何創(chuàng)建元素、如何更改內(nèi)聯(lián) CSS 樣式以及如何監(jiān)聽事件,需要的朋友可以參考一下
    2021-10-10
  • 微信小程序 本地數(shù)據(jù)讀取實例

    微信小程序 本地數(shù)據(jù)讀取實例

    這篇文章主要介紹了微信小程序 本地數(shù)據(jù)讀取實例的相關(guān)資料,需要的朋友可以參考下
    2017-04-04
  • forEach循環(huán)里break使用方式詳解

    forEach循環(huán)里break使用方式詳解

    這篇文章主要為大家介紹了forEach循環(huán)里break使用方式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • 微信小程序 SocketIO 實例講解

    微信小程序 SocketIO 實例講解

    這篇文章主要介紹了微信小程序 SocketIO 的相關(guān)資料,這里給大家提供了一個簡單實例,需要的朋友可以參考下
    2016-10-10
  • JavaScript節(jié)點的增刪改查深入學習

    JavaScript節(jié)點的增刪改查深入學習

    這篇文章主要為大家介紹了JavaScript節(jié)點的增刪改查深入學習示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • JS前端設(shè)計模式之發(fā)布訂閱模式詳解

    JS前端設(shè)計模式之發(fā)布訂閱模式詳解

    這篇文章主要為大家介紹了JS前端設(shè)計模式之發(fā)布訂閱模式詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-08-08
  • requestAnimationFrame定時動畫屏幕刷新率節(jié)流示例淺析

    requestAnimationFrame定時動畫屏幕刷新率節(jié)流示例淺析

    這篇文章主要為大家介紹了requestAnimationFrame定時動畫屏幕刷新率節(jié)流示例淺析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論

太和县| 沧源| 彝良县| 新宁县| 金溪县| 临夏市| 金阳县| 永嘉县| 龙陵县| 东乌珠穆沁旗| 沾化县| 葫芦岛市| 通海县| 南通市| 万源市| 阿勒泰市| 商丘市| 淮滨县| 永城市| 泰顺县| 绥芬河市| 长海县| 城市| 平陆县| 静海县| 文安县| 福贡县| 武胜县| 盐城市| 宜川县| 洛隆县| 景德镇市| 定兴县| 巴东县| 青冈县| 波密县| 黄梅县| 大埔区| 大冶市| 余庆县| 池州市|