!!!###!!!title=日期轴(时间粒度)——VisActor/VTable 教程文档!!!###!!!!!!###!!!description=甘特图的日期粒度决定了时间轴的显示方式和任务条的布局。VTable提供了多种日期粒度选项,包括:- 'day' 按天显示- 'week' 按周显示- 'month' 按月显示- 'quarter' 按季度显示- 'year' 按年显示- 'hour' 按小时显示- 'minute' 按分钟显示- 'second' 按秒显示!!!###!!!

甘特图日期粒度

甘特图的日期粒度决定了时间轴的显示方式和任务条的布局。VTable提供了多种日期粒度选项,包括:

  • 'day' 按天显示
  • 'week' 按周显示
  • 'month' 按月显示
  • 'quarter' 按季度显示
  • 'year' 按年显示
  • 'hour' 按小时显示
  • 'minute' 按分钟显示
  • 'second' 按秒显示

配置

可以通过timeLineHeader.scales配置项来设置日期粒度。可以设置多层,每层可以设置不同的日期粒度。

const ganttOptions = {
  timeLineHeader: {
    scales: [
      { type: 'day', label: '日' },
      { type: 'week', label: '周' },
      { type: 'month', label: '月' },
    ],
  },
};

内部时间粒度处理

时间粒度顺序

配置多层时间粒度后,vtable-gantt会默认将时间粒度从大到小依次显示。 如下示例中配置了多层scales:

scales: [
      {
        unit: 'week',
        step: 1,
        startOfWeek: 'sunday',
        format(date) {
          return `Week ${date.dateIndex}`;
        },
        style: {
          textStick:true,
          fontSize: 20,
          fontWeight: 'bold',
          color: 'red',
        }
      },
      {
        unit: 'day',
        step: 1,
        format(date) {
          return `Day ${date.dateIndex}`;
        },
        style: {
          textStick:true,
          fontSize: 20,
          fontWeight: 'bold',
          color: 'blue'
        }
      },
      {
        unit: 'month',
        step: 1,
        format(date) {
          return `Month ${date.dateIndex}`;
        },
        style: {
          textStick:true,
          fontSize: 20,
          fontWeight: 'bold',
          color: 'green'
        }
      },
      {
        unit: 'quarter',
        step: 1,
        startOfWeek: 'sunday',
        format(date) {
          return `Quarter ${date.dateIndex}`;
        },
        style: {
          textStick:true,
          fontSize: 20,
          fontWeight: 'bold',
          color: 'red',
        }
      },
      {
        unit: 'hour',
        step: 1,
        style: {
          fontSize: 16,
          color: 'green'
        }
      },
    ]

最终展示效果一定是粒度最小的在底部,粒度最大的在顶部。这个规则符合人类阅读习惯。

时间粒度完整性

日期表头中最底层一级是最小的时间粒度,且一定是完整的。

这个完整的意思通过下面两个图来解释:

上面中我们将最小时间粒度设置为day,可以看到日期表头中最底层一级的最左边的日期是和option中minDate一致的,为‘2024-07-17’。

下面我们将最小时间粒度设置为week,可以看到日期表头中最底层一级的最左边的日期应该为2024-07-15,因为2024-07-15是2024-07-17所在周的开始日期。

这个日期不是按照minDate来的,而是按照startOfWeek来的。目前VTable-Gantt的规则是:

  • 如果最小时间粒度为day,则日期表头中最底层一级的最左边的日期是和option中minDate一致的。
  • 如果最小时间粒度为week,则日期表头中最底层一级的最左边的日期是和option中minDate所在周的开始日期一致的。
  • 如果最小时间粒度为month,则日期表头中最底层一级的最左边的日期是和option中minDate所在月的开始日期一致的。
  • 如果最小时间粒度为quarter,则日期表头中最底层一级的最左边的日期是和option中minDate所在季度的开始日期一致的。
  • 如果最小时间粒度为year,则日期表头中最底层一级的最左边的日期是和option中minDate所在年的开始日期一致的。
  • 如果最小时间粒度为hour,则日期表头中最底层一级的最左边的日期是和option中minDate所在小时的开始日期一致的。
  • 如果最小时间粒度为minute,则日期表头中最底层一级的最左边的日期是和option中minDate所在分钟的开始日期一致的。
  • 如果最小时间粒度为second,则日期表头中最底层一级的最左边的日期是和option中minDate所在秒的开始日期一致的。

相关接口

  • updateScales:更新时间粒度配置
  • updateDateRange:更新日期范围

敬请期待

zoomIn和zoomOut功能,可以放大和缩小时间粒度。