监听timechange/timechanged事件时出现Invalid start "NaN"错误
解决Vis.js Timeline添加自定义时间栏时的"Invalid start 'NaN'"错误
我来帮你搞定这个头疼的NaN错误,看起来是你的Timeline配置和自定义时间栏的写法出了两处关键问题,咱们一步步理顺:
1. 先修复Timeline配置里的语法和逻辑错误
你原来的setOptions代码里,start参数的写法混乱,还把moment配置嵌套错了位置,这直接导致Timeline无法正确解析起始时间,抛出NaN错误。咱们把它拆清楚:
错误的原代码片段:
timeline.setOptions({ height: '100%', editable: false, moveable: true, zoomable: true, configure: true, showCurrentTime: false, start: vis.moment.utc().format('YYYY-MM-DDT00:00:00.000Z', moment: function(date) { return vis.moment(date).utc(); } });
修正后的配置:
timeline.setOptions({ height: '100%', editable: false, moveable: true, zoomable: true, configure: true, showCurrentTime: false, // 单独配置全局使用UTC的moment实例,这是顶级属性,别嵌套在start里 moment: function(date) { return vis.moment(date).utc(); }, // 正确设置起始时间:当天UTC的0点,用toISOString生成标准格式 start: vis.moment.utc().startOf('day').toISOString() });
2. 确保addCustomTime传入有效的时间值
你的代码里timeline.addCustomTime(vis....)没写完,这里必须传入有效的vis.moment实例、日期对象或者可解析的日期字符串,如果传了无效值,也会触发"Invalid start 'NaN'"错误。比如:
// 添加当前UTC时间作为自定义时间栏 const myCustomTime = vis.moment.utc(); // 第二个参数是自定义时间栏的ID(可选,方便后续修改/移除) timeline.addCustomTime(myCustomTime, 'my-custom-time-mark');
关键注意点
- 别把
moment配置嵌套在start参数里,它是setOptions的顶级配置项,用来统一Timeline的时间解析规则 - 所有时间参数要和你配置的UTC规则保持一致,避免时区转换导致的解析错误
- 一定要确认
vis.moment已经正确引入,没有拼写错误(比如写成普通moment而不是vis.moment)
内容的提问来源于stack exchange,提问作者xspydr
相关产品推荐
相关产品推荐

