2010-03-22 156 views
2

我目前使用的是jQuery fullcalendar plugin,但我在英國遇到夏令時問題。夏令時生效後,小時數將以相差一個小時顯示。如何解析UTC日期格式字符串到本地日期時間?

該問題似乎與插件解析功能。有人可以請我提供解析包含'Z'惡魔化的UTC字符串到當地日期時間顯示的功能嗎?

+0

是否可以至少添加一個示例日期。你不能指望人們調查這種類型的日期受到這種影響 – jitter 2010-03-22 09:12:52

回答

1

一些最初的混亂之後,你可能錯過了反正(我和安迪·E和主要我的意見,他的回答的答案),我發現了什麼似乎是真實的你的問題的原因。

該插件內部使用parseISO8601函數的相同代碼,該函數由Andy E提出,來自Parsing W3C's ISO 8601 Date/Times in JavaScript

儘管Andy E指出該代碼沒有問題,但使用該代碼的fullcalendar插件似乎也有一個bug。

的代碼更加緊密地尋找後,我發現這個插件似乎忽略你在時區。

比較這些代碼從原來的代碼片段

段從delete.me.uk

從fullcalendar.js
if (d[14]) { 
    offset = (Number(d[16]) * 60) + Number(d[17]); 
    offset *= ((d[15] == '-') ? 1 : -1); 
} 

代碼

if (!ignoreTimezone) { 
    if (m[14]) { 
     offset = Number(m[16]) * 60 + Number(m[17]); 
     offset *= m[15] == '-' ? 1 : -1; 
    } 
    offset -= date.getTimezoneOffset(); 
} 

正如你所看到的,如果ignoreTimezone設置爲false,插件只處理時區。但那根本就不是這樣。此插件中的parseISO8601()始終調用ignoreTimezone設置爲true。

因此,我敢打賭,錯誤來自於此,你應該考慮聯繫插件的作者。但是首先,如果在插件代碼中將ignoreTimezone設置爲false,則應首先驗證日期是否正確解析

1

我假設你的意思是一個ISO 8601日期字符串(UTC是時間標準,而不是顯示格式)。我在生產環境中使用delete.me.uk的this function已經有幾年了,沒有問題在BST/GMT(我的本地時區)中進行測試。

+0

@jitter:你是在低估我已經修復的錯誤嗎? (現在你已經編輯了你的評論,我沒有意義......) – 2010-03-22 09:25:19

+0

@jitter:done。我只能爲您提供自己使用該功能的經驗 - 自2006年起在生產環境中使用它來解析eBay API日期字符串。在我當地的時區,BST和格林威治標準時間以及其他沒有問題且沒有任何客戶報告的時區進行測試。 – 2010-03-22 09:36:13

+0

經過更多的調查,我發現真的是錯的。因此刪除了我的誤導性評論,並收回downvote – jitter 2010-03-22 09:38:57

1

這可能會爲你工作:

function parseDate(value) { 
    var a = /^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2}(?:\.\d*)?)Z$/.exec(value); 

    if (a) { 
     return new Date(Date.UTC(+a[1], +a[2] - 1, +a[3], +a[4], +a[5], +a[6])); 
    } 

    return null; 
} 
+0

試過了,不起作用。 – 2012-04-10 01:31:57

+0

它的工作:http://jsbin.com/urenok/edit感謝downvoting – 2012-04-10 10:38:30