Prisma 創(chuàng)建數(shù)據(jù)時(shí)間丟失 8 小時(shí):背后的原因
在使用 Prisma 時(shí),用戶(hù)有時(shí)會(huì)遇到數(shù)據(jù)時(shí)間丟失 8 小時(shí)的情況。這似乎表明數(shù)據(jù)庫(kù)的時(shí)區(qū)未正確設(shè)置。然而,在檢查數(shù)據(jù)庫(kù)時(shí)區(qū)后卻發(fā)現(xiàn)一切正常。那么,是什么導(dǎo)致了這種差異呢?
時(shí)間存儲(chǔ)約定
數(shù)據(jù)庫(kù)不會(huì)保存時(shí)區(qū)信息。因此,需要約定好保存時(shí)間時(shí)應(yīng)采用 UTC 還是本地時(shí)間。建議使用 UTC 時(shí)間,因?yàn)樗奖戕D(zhuǎn)換。
數(shù)據(jù)轉(zhuǎn)換
在將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)庫(kù)之前,必須將其從本地時(shí)間轉(zhuǎn)換為 UTC 時(shí)間。在讀取數(shù)據(jù)時(shí),還需要進(jìn)行相反的轉(zhuǎn)換。此轉(zhuǎn)換通常在服務(wù)端執(zhí)行。
本地時(shí)間與 UTC 時(shí)間
對(duì)于面向用戶(hù)的瀏覽器端來(lái)說(shuō),默認(rèn)使用本地時(shí)間。因此,在將數(shù)據(jù)從瀏覽器傳輸?shù)椒?wù)端時(shí),需要判斷該時(shí)間屬于哪個(gè)時(shí)區(qū),然后將其轉(zhuǎn)換為 UTC 時(shí)間。
解決方法
要解決此問(wèn)題,需要在瀏覽器端判斷時(shí)區(qū),并相應(yīng)地轉(zhuǎn)換時(shí)間。對(duì)于非用戶(hù)指定的時(shí)間,可以將其替換為服務(wù)器當(dāng)前時(shí)間,并使用 UTC 格式存儲(chǔ)。
通過(guò)遵循這些步驟,可以確保 Prisma 創(chuàng)建數(shù)據(jù)時(shí)的時(shí)區(qū)正確,避免因這種差異而帶來(lái)的混亂。