我有一个奇怪的情况发生在这里。我将以下JSON传递给时间线控件:
[
{
"UserId": 2,
"ItemId": 3,
"ItemText": null,
"ItemDate": "2014-06-09T18:51:37",
"ItemDateEnd": null,
"OutcomeScore": null
},
...
]
这是一个简单的项目数组,我传递给控件进行渲染。在Firefox中,这完全呈现,没有任何问题。但是,我尝试过的每个其他浏览器都显示+1小时的项目。我已经在Opera,Chrome和IE9中尝试过它们,除了Firefox之外,它们都显示出同样的问题。现在时间在所有浏览器上按预期显示。
有趣的是,我现在正处于格林尼治标准时间夏令时+ 1小时......但为什么这会选择性地影响浏览器呢?
每个浏览器都运行完全相同的查询并获得完全相同的JSON。我很困惑,甚至不知道从哪里开始寻找。
我正在运行v2.5.0的时间线。我已经尝试更新到最新版本并发生了同样的事情,所以我回滚到2.5.0以解决问题,然后再将最新版本集成到页面中。
有人看过这个并有解决方案吗?
答案 0 :(得分:1)
从字符串创建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);
答案 1 :(得分:1)
首先,请注意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