首页 > 解决方案 > 在 Chart.js 中使用 utcoffset 时遇到问题

问题描述

我正在尝试使用带有日期时间 x 轴的 Chart.js,我需要通过减去 5 小时来调整我的所有值。这是我的一些代码:

var timeFormat = 'MM/DD HH:mm';

time: {
  format: timeFormat,
  tooltipFormat: 'll',
  parser: function(utcMoment) {
    return moment(utcMoment).utcOffset(5, true);
  }
},

没有解析器函数,我的值是正常的(2021 年 1 月 10 日 10:00),但是使用解析器函数,由于某种原因,我的值一直设置回 2001 年。是的,两千零一。( 2001 年 1 月 10 日 10:00)注意时间实际上并没有改变(所以有两个错误:1.时间没有调整,应该调整。2:年调整不应该)。为什么会这样?

标签: chart.jsmomentjsutc

解决方案


我假设您想将其回滚 5 小时的原因是由于时区差异。如果是这种情况,您应该使用moment-timezone而不是moment.

话虽如此,从当前日期减去 5 小时实际上比你正在做的更简单。

在将日期输入 之前moment,您需要将其转换为 js Date 对象,如下所示new Date('2021-01-10 00:00:00'):由于您的解析器函数接受m/d H:M格式中的日期,因此您需要先将年份附加到它上面。

所以你的代码应该是这样的:

parser: function(utcMoment) {
    const new_date = utcMoment.split(' ')[0] + '/' + (new Date().getFullYear()) + ' ' + utcMoment.split(' ')[1];
    return moment(new Date(new_date)).subtract({hours: 5})
}

推荐阅读