You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 01:30:48