Angular5中Anychart8.1 ResourceGantt本地时间显示问题求助
解决Angular 5中Anychart 8.1 ResourceGantt本地时间显示问题
我之前在Angular项目里用Anychart做ResourceGantt的时候,也踩过这个时区的坑!结合你用的Angular 5和Anychart 8.1版本,给你几个亲测有效的解决办法:
1. 强制图表使用本地时区渲染
Anychart默认会把传入的Date对象转成UTC处理,这就是问题根源。你可以在初始化ResourceGantt实例后,添加时区配置,让图表直接用本地时间逻辑:
// 假设你的图表实例变量是chart chart.timezone().useLocalTime(true);
这个配置会告诉Anychart跳过UTC转换,直接基于本地时间来渲染任务项和时间轴。
2. 手动转换日期为字符串(避免自动转UTC)
如果上面的配置没生效,你可以绕过Date对象的自动转换,用字符串格式传递日期。借助Angular自带的DatePipe把本地Date转成带具体时间的字符串:
import { DatePipe } from '@angular/common'; // 在组件构造函数中注入DatePipe constructor(private datePipe: DatePipe) {} // 处理数据时转换日期 const localStartDate = new Date(); // 你的本地日期对象 const formattedStart = this.datePipe.transform(localStartDate, 'yyyy-MM-ddTHH:mm:ss'); const formattedEnd = this.datePipe.transform(localEndDate, 'yyyy-MM-ddTHH:mm:ss'); // 把formattedStart和formattedEnd作为start/end字段传入ResourceGantt的数据项
这样Anychart会直接解析字符串里的本地时间,不会再偷偷转成UTC。
3. 自定义时间轴标签的格式化逻辑
要是时间轴的标签还是显示UTC时间,你可以给x轴标签加个自定义格式化函数,强制输出本地时间格式:
chart.xAxis().labels().format(function() { // 将刻度对应的日期转成本地时间字符串,格式可以自己调整 return this.value.toLocaleString(); });
这个方法能确保时间轴上的每个标签都按照本地时间展示,比如显示你所在时区的小时、日期等信息。
另外提一句,Anychart 8.1关于ResourceGantt的时区处理确实在官方文档里藏得比较深,你要确保在图表初始化完成后就设置时区配置,避免被后续的初始化逻辑覆盖。
内容的提问来源于stack exchange,提问作者gogessj4
相关产品推荐
相关产品推荐

