簡體   English   中英

獲取客戶端和服務器之間的時區差異

[英]Get timezone difference between client and server

如果我的用戶在加利福尼亞,並且他們的計算機設置為PST,則那是下午1:00。 如果我的服務器設置為EST,則當前服務器時間是下午4:00。

我需要一種方法來獲得客戶端和服務器之間的時區差異,無論是在Javascript還是C#中。 在我的例子中,我會得到3(或-3,無所謂)。

有誰知道如何做到這一點?

編輯:RedFilter的可能解決方案

在javascript中完成所有操作:

serverDate = new Date('<%= DateTime.Now.ToString() %>');
clientDate = new Date();
diffMin = (serverDate.getTime()-clientDate.getTime())*1000*60;  //get difference in minutes

認為這會奏效嗎? 或者兩者都會同時返回?

你可以:

1 - 將服務器日期作為Javascript日期變量返回給客戶端。
2 - 創建一個新的javascript日期客戶端( var currentTime = new Date(); )並減去上述日期
3 - 將結果發回服務器(如果需要,您可能只需要了解客戶端的區別)。

更新

這是一個例子:

serverDate = new Date('<%= DateTime.Now.ToString() %>'); 
clientDate = new Date(); 
diffMin = (serverDate.getTime()-clientDate.getTime())/(1000*60);
alert("serverDate: " + serverDate + "\r\n" + "clientDate: " + clientDate + "\r\n" +
  "diffMin: " + diffMin);

如果服務器和客戶端在同一台機器上,您將看到diffMin接近零。 由於生成日期的服務器端腳本與瀏覽器解析和執行javascript之間的時間,日期之間存在細微差別。

//這對我很有用 - DateTime.Now.ToString(“yyyy-MM-ddTHH:mm:ss”)

您需要知道位置或機器的時區嗎?

如果您需要知道該位置的時區,那么您最好的選擇是訂閱地理IP服務,並檢查IP,然后檢查該位置的時區(有公共數據庫)。 由於IP地理信息不能得到保證,因此無法保證(這絕對不僅僅是理論上缺乏保證,而且信息不足也很多)。

但通常,您真正想要的是客戶端計算機的時區設置。 對於大多數服務我覺得如果我在旅​​行並且有一個網站認為我在與我工作的時間不同的時候會感到煩惱(如果我不長時間不使用它,我會堅持我的家鄉時區)。

這很容易在客戶端完成。 new Date().getTimezoneOffset()返回UTC與本地時間之間的分鍾數。 例如,目前我在愛爾蘭夏令時(GMT + 1小時夏令時),它返回-60。

您可以輕松地將其放在圖像或XHR請求使用的URI中,或者將其放在cookie值中。

這個問題一直困擾着我:我遇到了類似的問題,但我正在服務器端並運行node.js AWS Lambda。 我無法接受我需要將時間從客戶端傳遞到服務器(如果是這種情況,反之亦然)。 我知道時區,javascript知道轉換它們的規則,為什么我需要來回傳遞它? 我做的只是計算兩個時區之間的差異,無論日期是什么。 下面,它設置為在美國的UTC和時區之間進行轉換,從來沒有部分時間,所以我將它設置為整數小時,但如果你曾經工作過,你需要重新工作你需要進行回合,因為有剩余的額外毫秒(我懷疑它與銫的衰變率有關,而不是舍入錯誤 - 不確定不關心)。

請注意,這是在服務器端運行(但反過來顯然會起作用)並且我的服務器運行UTC。 另請注意,初始化第一個日期變量時,需要將日期設置為您希望偏移的日期,因為它們可以每天更改。

var UTCTime = new Date();
var pacificTime = new Date(UTCTime.toLocaleString("en-US",{timeZone: "America/Los_Angeles"}));
var offset = Math.round((UTCTime-pacificTime)/1000/60/60,0);
console.log(offset); // returns 7 (during daylight saving time)

希望這有助於某人......

檢查時區差異的一個好方法是知道時間(時間)所在的時區(位置)。 如果你可以在客戶端和服務器端獲得它,你可以檢查來自Koders的TimeZoneInfo類(我認為需要3.5) TimeZoneInfo

將關聯區域的客戶端和服務器時間轉換為UTC(ConvertTimeZoneToUtc)並比較兩者。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM