2013-07-19 74 views
15

所以我有iso日期時間,需要從字符串轉換爲日期對象。如何將日期轉換爲本地瀏覽器時區?停止javascript日期功能從更改時區偏移

new Date('2013-07-18T17:00:00-05:00') 
Thu Jul 18 2013 18:00:00 GMT-0400 (EDT) 

我想

星期四2013年7月18日17:00:00 GMT-0500(XX)

+1

ISO格式化日期的點將被轉換回您的時區... – SeinopSys

+1

您不能。 JavaScript'Date'對象不存儲任何時區信息,當輸出/ toStringing /記錄它們時,它們將使用本地瀏覽器時區(不幸的是默認值)或UTC(使用顯式方法)。 – Bergi

+0

但是,如果我想顯示的內容不在瀏覽器時區中。爲什麼不能日期解析字符串,並將日期對象設置爲iso字符串中指定的時區偏移量。 – user2434674

回答

0

懷疑這將有助於:

function goAheadMakeMyDate(s){ 
    var d = new Date(s); 
    // override Date.toString() 
    d.toString = function(){ return ''+s; }; 
    return d; 
} 

var example = goAheadMakeMyDate("Fri 19 July 2013 12:00:00 GMT"); 

example.toString() // returns string actually used to construct the date 
'Fri 19 July 2013 12:00:00 GMT' 

example.toLocaleString() 
'Fri Jul 19 2013 08:00:00 GMT-0400 (EDT)' 

1*example // gives seconds since epoch 
1374235200000 

隨着你的輸入:

example = goAheadMakeMyDate('2013-07-18T17:00:00-05:00') 
{ Thu, 18 Jul 2013 22:00:00 GMT toString: [Function] } 
> example.toString() 
'2013-07-18T17:00:00-05:00' 
> example.toLocaleString() // I live in GMT-4 
'Thu Jul 18 2013 18:00:00 GMT-0400 (EDT)' 
> 1*example // convert to integer date 
1374184800000 

但是,如果你開始修改這個日期,toString將會而不是改變並且會咬你。

+0

這使我的日期:-)但是,當日期對象被修改時(通過'setHour'或其他東西),它不會工作。 – Bergi

+1

但是你射了5次射門,還是你的第6次?其實,正確地做這件事可能需要重複所有的日期...... – Paul

-2

如果您願意使用庫,那麼可以使用MomentJS JavaScript庫來處理時間和日期。

+2

應該顯示如何使用momentjs來回答問題,而不是指向一個鏈接。 – Seph

1

您可以使用庫如Moment.js來做到這一點。

查看字符串+格式解析

http://momentjs.com/docs/#/parsing/string-format/

下應該分析你提供你的約會,但你可能需要修改它爲您的需求。

var dateString = "2013-07-18T17:00:00-05:00"; 

var dateObject = moment(dateString, "YYYY-MM-DDTHH:mm:ssZ").toDate(); 

另外,看到片刻的字符串分析器,它看起來是在你提供的格式,隨着時間的秒數和時區之間的空間除外。

http://momentjs.com/docs/#/parsing/string/

2

,因爲它是JavaScript來的工作只有簡單的方法你不能更改JavaScript的這種行爲。會發生什麼簡單的是,Javascript查看時間轉換,計算匹配時間戳,然後詢問OS在本地時區中表示此時間戳。這裏要理解的關鍵是-05:00不是時區的指示,而僅僅是從UTC開始的轉變。

時區是複雜的野獸,只是任意的政治決定。操作系統提供的服務可以在本地時區顯示時間,但不會在其他時區顯示。要做到這一點,你必須考慮諸如DST之類的東西,這幾乎就是地獄。

與時間管理一樣,處理這個問題的唯一體面的方法是使用專用庫。在Javascript中,你會發現Moment.jsMoment.Timezone.js非常有幫助。

http://codepen.io/Xowap/pen/XKpKZb?editors=0010

document.write(moment('2013-07-18T17:00:00-05:00').tz('America/New_York').format('LLL')); 

作爲獎勵,你會得到一噸格式/從Moment.js解析功能。

另請注意,只要您使用ISO 8601,您的日期可以精確定位到一個精確的時刻,因此可以顯示在您喜歡的任何時區。換句話說,JS「轉換」你的日期並不重要。