在我的頁面上,用戶輸入一個生日。該模型將日期保存爲javascript日期。在請求中,日期被轉換爲UTC,其中是給定日期的時區偏移量。在服務器端澤西島讀取該日期並添加當前時區偏移量。時區和JSON閱讀運動衫
因此,作爲寫這篇文章會發生什麼(服務器處於CET)的:
用戶輸入:
01/03/1967
客戶端傳輸:
JSON.stringify(new Date(1967,2,1))
"1967-02-28T23:00:00.000Z"
服務器增加1小時,並得到正確01/03/1967
。
但是,如果用戶輸入
01/04/1967
客戶端傳輸:
JSON.stringify(new Date(1967,3,1))
"1967-03-31T22:00:00.000Z"
服務器增加1小時,並得到正確31/03/1967
。當DST在夏天參與時,服務器可能會增加兩個小時,並且日期再次正確。
我現在只傳輸日期字符串(不是日期對象,所以只是用戶輸入的內容)。
其他人有這個問題嗎?如何解決這種差異?
我沒有從JSON.stringify中得到任何確定性的行爲,爲什麼它有時使用2小時的偏移量,爲什麼有時只有一個小時。
例如參見日期如下:
JSON.stringify(new Date(1981,5,1))
""1981-05-31T22:00:00.000Z""
JSON.stringify(new Date(1980,5,1))
""1980-05-31T23:00:00.000Z""
這正是我現在所做的,正如我寫的:「我現在只傳輸日期字符串(不是日期對象,所以只是用戶輸入的內容)。「但是,謝謝你的澄清 – Christian
@Waxolunist啊好吧,沒有讀過這句話,我認爲這是最好的方式,所以你可以避開所有這些奇怪的時區問題,這對你介紹一個媒介JavaScript-使用時區的對象沒有任何基於這種類型的棘手的解決方法可以真正治癒這個問題,即這種方法僞造真正的輸入是什麼(一個普通的日期)。 –