Frappe Gantt chart日期显示偏移 较设置日期早1天如何修复
问题描述
使用frappe gantt chart包时,将任务start参数设置为"2022-04-18",但图表中的任务条却显示在设置日期的前一天,是否可以通过设置偏移量来修正该日期对齐问题?
复现代码
任务配置代码:
return { start: '2022-04-18', end: '2022-05-20', name: project, id: "Task " + i, progress: 100, };
甘特图初始化配置:
var gantt2 = new Gantt("#gantt-1", tasks, { date_format: 'YYYY-MM-DD', }

根因说明
不需要手动配置偏移量修复,该问题是JavaScript原生日期解析规则的时区偏差导致:
- 无时间后缀的
YYYY-MM-DD格式字符串,会被JS默认按照UTC时区当日0点解析 - 如果运行环境处于UTC以西的时区(如UTC-4北美东部时区、UTC-8太平洋时区等),转换为本地时间后该时间点会落在前一天的下午/晚间,甘特图按本地时间匹配日期列时,任务条就会错位到前一天
- 注意:你提供的初始化代码末尾缺失一个闭合括号
),属于语法疏漏,调试时记得补上。
修复方案
任选一种方案即可解决问题:
方案1:直接传入本地时区构造的Date对象
避免传入纯日期字符串触发UTC解析,直接用JS Date构造本地时区的当日0点对象即可,注意Date的月份参数从0开始计数(4月对应索引3):return { start: new Date(2022, 3, 18), // 对应本地时间2022-04-18 00:00 end: new Date(2022, 4, 20), // 对应本地时间2022-05-20 00:00 name: project, id: "Task " + i, progress: 100, };方案2:给日期字符串拼接本地时间后缀
给日期字符串补上T00:00:00后缀,带时间的ISO字符串会被JS默认按本地时区解析,不会触发UTC转换:return { start: '2022-04-18T00:00:00', end: '2022-05-20T00:00:00', name: project, id: "Task " + i, progress: 100, };方案3:开启UTC模式适配
升级到最新版frappe gantt后,初始化时开启utc配置项,让甘特图全链路按UTC时间计算日期,和你传入的UTC日期字符串匹配:var gantt2 = new Gantt("#gantt-1", tasks, { date_format: 'YYYY-MM-DD', utc: true }) // 补上之前缺失的闭合括号
内容的提问来源于stack exchange,提问作者user
相关产品推荐
相关产品推荐

