亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將 javascript new Date().getTimezoneOffset()

如何將 javascript new Date().getTimezoneOffset()

繁星coding 2022-12-18 16:17:50
請參閱標題:對于我正在處理的解決方案,我需要獲取當前時區偏移量(從客戶端,運行 javascript/jQuery)并在后端 C# 代碼中使用它。這個問題與此處提出的問題非常相似,但存在一些差異 - 主要差異是我非常確定客戶端計算機上的時間不會被篡改。所以new Date().getTimezoneOffset()就可以了。我無法在提交表單時讀取值,因為用戶不在表單中工作:用戶登錄后,在屏幕上可見的項目中有一個表格,其中包含用戶或其他用戶輸入的數據。此數據包含必須根據客戶端時區進行調整的 UTC 日期時間。C# 代碼負責檢索和格式化數據——因此我的問題。將值存儲在某處就足夠了,以便 C# 可以在必要時讀取它。但我不認為這也可以做到。這里的方法是什么?提前致謝!
查看完整描述

1 回答

?
尚方寶劍之說

TA貢獻1788條經驗 獲得超4個贊

您建議的方法存在缺陷,因為客戶端瀏覽器的當前偏移量僅適用于當前日期和時間。實際上,時區偏移量在給定時區內隨時間變化。您不能僅從一個時間點獲取單一偏移量并期望使用它來將其他日期和時間轉換為同一時區。相反,您需要使用標識時區的字符串,而不是該時區的偏移量。

例如,考慮美國的東部時區。在一年中的部分時間,它使用 UTC-5,我們稱之為東部標準時間 (EST)。在一年中的其他時間,它使用 UTC-4,我們稱之為東部夏令時 (EDT)。這個時區由 IANA time zone ID"America/New_York"或 Windows time zone ID 標識"Eastern Standard Time"(涵蓋整個區域,包括 EST 和 EDT,盡管它的措辭)。

所以,把這個問題分解成幾個步驟:

  1. 在 JavaScript 中,識別用戶的 IANA 時區 ( America/New_York):

    • 如果你的目標是現代網絡瀏覽器,你可以調用這個函數:

      Intl.DateTimeFormat().resolvedOptions().timeZone
    • 如果你需要支持舊的網絡瀏覽器,你可以使用jsTimeZoneDetect,或者moment.tz.guess()來自Moment-Timezone。

  2. 通過您喜歡的任何機制(表單發布、XHR、獲取等)將該字符串發送到您的網絡服務器

  3. 在您的 .NET 代碼中,接收該字符串并使用它來引用時區并進行轉換。你有兩個選擇:

    • 您可以使用Noda Time,將 IANA 時區 ID 傳遞給DateTimeZoneProviders.Tzdb主頁示例中所示。

    • 您可以使用 .NET 的內置TimeZoneInfo對象。如果您在非 Windows 系統(Linux、OSX 等)上運行 .NET Core,您只需將 IANA 時區 ID 傳遞給TimeZoneInfo.FindSystemTimeZoneById. 如果您使用的是 Windows,則需要先將其轉換為 Windows 時區 ID ( "Eastern Standard Time")。您可以使用TZConvert.GetTimeZoneInfo我的TimeZoneConverter庫。

  4. 一旦您擁有DateTimeZoneNoda Time 或TimeZoneInfo對象,您就可以使用其上的方法將 UTC 值轉換為該時區的本地時間值。這些中的每一個都將為轉換的時間點應用正確的偏移量。

我還要說,許多應用程序只是要求用戶從下拉列表中選擇他們的時區并將其保存在用戶配置文件中。只要您存儲的是時區標識符字符串而不僅僅是數字偏移量,這種方法完全可以用來替換上面的步驟 1 和 2。


查看完整回答
反對 回復 2022-12-18
  • 1 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號