2015-05-26 59 views
0

按照我知道的,如果客戶端時間超前或滯後,如何在客戶端獲得確切的UTC/GMT時間?

var now = new Date(); 
var now_utc = new Date(now.getUTCFullYear(), now.getUTCMonth(), now.getUTCDate(), now.getUTCHours(), now.getUTCMinutes(), now.getUTCSeconds()); 

它是基於客戶端的時間機器。

假設客戶端機器已經修改了前面或後面的時間,那麼這將是一個問題。

請糾正我如果我錯了。

問題 - 如果客戶端時間超前或滯後,如何在客戶端獲得確切的UTC/GMT時間?

+0

'new Date()。getTimezoneOffset()'會以分鐘爲單位給出偏移時區。爲了使數小時,檢查這[鏈接](http://stackoverflow.com/a/30377368/1577396) –

回答

0

如果您想要獨立於用戶時鐘的解決方案,則必須使用某種Web服務。您可以構建自己的(將服務器的時間發送到瀏覽器),或使用Web服務。

下面是一個使用timeapi.org的例子,它以GMT格式返回並輸出當前時間。您可以修改此代碼,將用戶的時區作爲偏移量來代替(將URL替換爲類似http://www.timeapi.org/+10/now的地址,其中+10是偏移量)。

<script type="text/javascript"> 
    function myCallback(json) { 
    alert(new Date(json.dateString)); 
    } 
</script> 
<script type="text/javascript" src="http://timeapi.org/utc/now.json?callback=myCallback"></script> 

this page中解除。

2

您可以使用toISOString功能:

var utc = new Date().toISOString(); // 2015-05-26T04:30:09.490Z 

或者通過計算timezone offset

var now = new Date(); 
var utc = new Date(now.getTime() + now.getTimezoneOffset() * (60 * 1000)); 

請注意,以分鐘爲單位在上面的代碼中getTimezoneOffset()返回時區創建一個新的日期。所以,我將它轉換爲毫秒。

總是有moment-timezone庫,它可以簡化處理時區。

+0

如果我已經設置了我的時間提前,這是行不通的,例如。 +2小時。然後,var utc給我錯了。 –

+0

我不確定你指的是哪兩個例子。另外,「我未來的時間」是指「時區」是正確的? – eymen

+0

我的意思是相同的時區,但提前幾個小時。 –