????????遇到一個bug,不仔細看,都不一定能發現,bug描述:我們有一個搜索框,里面有一個時間選擇器,當我使用<el-date-picker>時,我發現當我選擇時分秒之后,顯示都正常,但是當我傳給后端之后發現,時間居然少了8小時,居然這么巧,不多不少,正好8小時,那肯定是時區的問題了!!!
一、問題復現
? ? ? ? 我們在開發的時候,后端由于框架問題,需要一個格林威治格式的時間,而<el-date-picker>組件默認會返回一個格林威治格式的時間,所以剛開始我直接返回了組件默認的時間。
????????很明顯,組件默認的時間格式傳參跟我選擇的時間偏差8小時,根本原因是:中國國家標準時間是東經120°(東八區)的地方時間,同格林威治時間(世界時)整整相差8小時
二、解決思路
? ? ? ? 官網并沒有給出這種情況的解決方案,但是其實不必執著于組件本身:在<el-date-picker>有兩個屬性:format 和?value-format他們的用法是這樣描述的:
format屬性:用于控制日期選擇器中顯示的日期的格式,即用戶看到的日期格式。
????????它不會影響日期選擇器的值,只是用于用戶界面的顯示。當用戶選擇日期時,選擇器會根據 format 屬性來格式化顯示的日期,但實際的日期值不會受到影響。
value-format屬性:用于控制實際選擇器的值的格式,即在v-model中返回的日期值的格式。
????????它定義了日期選擇器返回的日期值的格式。當用戶選擇日期時,選擇器將會將日期值格式化為value-format中指定的格式,并將其傳遞給v-model綁定的變量。
? ? ? ? 如果清楚了這兩個屬性的原理,這個問題也就迎刃而解了:默認的格林威志時間會偏差8小時,但是通過value-format轉換后的時間是正常的,我們通過這兩個屬性直接自己設置當前v-model的值(即自己偽裝一個格林威治時間),最后我也是通過這種方法直接解決了問題。
三、解決代碼
<el-date-pickerv-model="form.startDate"format="YYYY-MM-DD HH:mm:ss"value-format="YYYY-MM-DDTHH:mm:ss.000Z"type="datetime"placeholder="請選擇時間"
/>
????????注意:format和value-format時間格式設置的時候,一定要注意時分秒的大小寫。