2012-01-10 38 views
10

我有一個JavaScript倒數計時器,通過採取指定的日期和時間,並將其與當前的日期和時間進行比較。問題是,當前時間與用戶時區有關,因此剩餘時間在用戶之間是不同的。使用絕對時區的JavaScript倒計時?

如何在特定的時區內使用定時器倒計時,在我的情況下爲GMT -5小時?

我知道我可以使用下面的代碼來獲取用戶的時區,但我失去了如何使用它。

myDateObj.getTimezoneOffset()/ 60

+0

http://countdownjs.org – mckamey 2013-02-06 18:24:52

回答

6

快速搜索發現:convert-the-local-time-to-another-time-zone-with-this-javascript

繼文章逐字讓你這個例子:

var d = new Date(); 

var localTime = d.getTime(); 

var localOffset = d.getTimezoneOffset() * 60000; 

var utc = localTime + localOffset; 

// obtain and add destination's UTC time offset 
// for example, Bombay 
// which is UTC + 5.5 hours 
var offset = 5.5; 
var bombay = utc + (3600000*offset); 

var nd = new Date(bombay); 
alert("Bombay time is " + nd.toLocaleString() + "<br>"); 

的jsfiddle:http://jsfiddle.net/GEpaH/

只要你更新你想要的偏移量,你應該全部設置好。

0

你不確切地說你正在努力完成什麼。 javascript日期對象檢索本地時間和「時區偏移」(相對於GMT(UTC))。這些當然是由用戶「設置」的,所以即使在同一時區,兩個用戶也不可能具有相同的「時間」。

如果您試圖在不同用戶之間劃時間,則需要引用一些集中的時間授權。

我會使用AJAX類型調用(XMLHttpRequest)到頁面擁有我自己的服務器,它返回我的服務器的時間。這樣每個用戶都在同一時間參考。

Google XMLHttpRequest查找您需要的JS代碼的示例(通常是針對簡單服務的相應服務器端代碼)。 PS:我還會安裝一些簡單的客戶端軟件,通過每隔10分鐘與一個原子鐘同步來使我的服務器上的時間保持準確。

5

您可以使用Date.UTC(year,month,day,hours,minutes,seconds,msec)

它的工作就像Date構造,但在格林威治時間(偏移= 0),而不是本地時間返回的參數的時間戳。

var localtime=new Date(Date.UTC(year,month,day,hours,minutes,seconds,msec)) 

返回指定UTC時間的本地時間。

每個人(其時鐘設置正確)將一起結束倒計時。

0

您無法獲得JavaScript的準確日期,因爲它是客戶端,並且基於用戶的操作系統時鐘。您可以使用jCounter來顯示基於服務器端時區的倒計時。

但是,嘿,如果你真的想自己做,下載jCounter,你會發現一個dateandtime。PHP文件以及檢索當前日期服務器端,作爲時間戳(它將不得不被放置在服務器btw上,而不是在您的桌面上:P)

檢查該腳本如何使用該文件並檢索實際當前日期以對其進行操作並計算準確的倒計時。

乾杯

1

只需創建與RFC 2822-timestamp與時區的日期。這段時間將轉換爲用戶當前位置(基於操作系統設置)。即使更正了daylight savings time

我在挪威,目前是夏令時,因此它的GMT + 2。這是當我創建使用GMT-0500 Date對象會發生什麼:

var myDateObj = new Date("Fri Apr 17 2015 12:00:00 GMT-0500 (CDT)"); 
myDateObj.toString(); 

星期五2015年4月17日19:00:00 GMT + 0200(CEST)

如何得到正確的日期字符串爲您的位置?如果這是您目前所在的時區;只需在您的瀏覽器開發工具控制檯中執行myDateObj.toString()即可。對於不同的時區;首先更改操作系統中的時區。 (Or read the RFC

new Date().toString(); 

星期五2015年4月17日12點36分57秒GMT + 0200(CEST)

+0

「注:與Date構造日期字符串的解析(和Date.parse,它們是等價的)強烈反對,由於瀏覽器的差異和不一致」 - https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date – Fabian 2016-08-03 19:23:08

0

要修改布蘭登已經計算UTC偏移時間的辦法,我們可以苗條的代碼分解成Date對象的兩線延伸:

/* getOffsetDate - Returns a Date shifted by a certain offset 
* @param offset the UTC offset to shift, in hours 
* @return new date object shifted by UTC offset 
*/ 
Date.prototype.getOffsetDate = function(offset) { 
    utc = this.getTime() + (this.getTimezoneOffset() * 60000); 
    return new Date(utc + (3600000*offset)); 
} 

然後可以計算UTC-5移如下日期:

myDate = new Date().getOffsetDate(-5); 

應該指出的是,以這種方式擴展原生原型通常被認爲是不好的做法,因爲它混淆了其他庫所依賴的核心對象。爲了證明它,你必須爭論這個功能應該是Date對象的本地部分。