簡體   English   中英

奇怪的時間軸日期發布-將來在除FireFox之外的所有瀏覽器上呈現的項目

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM