[英]Odd Chap Timeline Date Issue - Items Rendered in the Future on All Browsers Apart from FireFox
我這里發生一種奇怪的情況。 我將以下JSON傳遞給時間線控件:
[
{
"UserId": 2,
"ItemId": 3,
"ItemText": null,
"ItemDate": "2014-06-09T18:51:37",
"ItemDateEnd": null,
"OutcomeScore": null
},
...
]
這是我傳遞給控件以呈現的項目數組的簡單形式。 在Firefox中,這完美呈現,沒有任何問題。 但是,我嘗試過的所有其他瀏覽器都顯示+1小時。 我已經在Opera,Chrome和IE9中進行了嘗試,除了Firefox之外,它們都顯示出相同的問題。 現在的時間將在所有瀏覽器上正常顯示。
有趣的是,我現在處於格林尼治標准時間(GMT)夏令時+ 1h ... ...但是為什么這有選擇地影響瀏覽器呢?
每個瀏覽器都運行完全相同的查詢並獲取完全相同的JSON。 我很困惑,甚至不確定從哪里開始尋找。
我正在運行時間線v2.5.0。 我嘗試過更新到最新版本,並且發生了同樣的事情,所以我回滾到2.5.0以解決問題,然后再將最新版本集成到頁面中。
有人看到了並有解決方案嗎?
如您所見,從字符串創建Date對象是不可靠的。 您應該手動將這些字符串解析為Date對象,如下所示:
// assumes date string is in the format "yyyy-MM-ddTHH:mm:ss"
var dateMatch = dataItem.ItemDate.match(/(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2}):(\d{2})/);
var year = parseInt(dateMatch[1], 10);
var month = parseInt(dateMatch[2], 10) - 1; // convert to javascript's 0-indexed months
var day = parseInt(dateMatch[3], 10);
var hours = parseInt(dateMatch[4], 10);
var minutes = parseInt(dateMatch[5], 10);
var seconds = parseInt(dateMatch[6], 10);
var date = new Date(year, month, day, hours, minutes, seconds);
首先,請注意,CHAP鏈接庫的時間軸不支持將字符串作為日期,您應提供日期或帶有數字的時間戳(請注意,時間軸的繼承者vis.js確實支持將字符串作為日期)。 字符串作為日期現在已經可以使用,因為大多數瀏覽器現在都支持從ISO日期字符串創建日期。
您遇到的問題是因為您提供了沒有時區信息的ISO日期字符串。 顯然,在這種情況下,並非所有瀏覽器都具有相同的默認行為。 在Firefox和其他瀏覽器的JavaScript控制台中輸入以下內容:
new Date("2014-06-09T18:51:37").toISOString()
// output is ambiguous, time zone information missing
並且您會看到他們以不同的方式添加時區信息。 為避免此類歧義,您應自己提供時區信息。 要以UTC指定時間,請在字符串末尾添加一個Z:
new Date("2014-06-09T18:51:37Z").toISOString()
// output is unambiguous
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.