Highcharts - 折线图使用错误的TimeZone

时间:2016-01-26 06:44:05

标签: javascript highcharts highstock

我有一种情况需要在Highchart中显示从服务器收到的确切时间。日期时间不应基于服务器时区或客户端时区而更改。

我已将UTC设置为true:

YAxis leftAxis = mChart.getAxisLeft();
leftAxis.setAxisMaxValue(1500f);
leftAxis.setAxisMinValue(1200f); 
leftAxis.setStartAtZero(false);

我将毫秒作为数据传递:

Highcharts.setOptions({
    global: {
        useUTC: true,
        timezoneOffset: 0
    }
});

然后像这样设置系列:

    for (i = 0; i < xAxisData.length; i++) {
        item = xAxisData[i];
        dateMiliseconds = parseInt(item.DateTime.replace('/Date(', ''));
        var obj = { x: dateMiliseconds, title: item.FlagText, text: item.Text };
        xData.push(obj);
    }

如果我的服务器具有UTC日期时间系统设置,现在一切正常。

enter image description here

但是当我的服务器具有UTC + 5日期时间系统设置时,图表是错误的:

enter image description here

我需要的是无论服务器时区是什么,无论客户端时区是什么,它都应显示 $scope.chartConfig.series.push({ type: 'flags', data: xData, onSeries: 'mileageSeries', shape: 'squarepin', name: 'Events', title: 'Events', id: "Events" //width: 16 }); 。在两种情况下,从服务器发送7:42时间数据相同:

7:42

3 个答案:

答案 0 :(得分:1)

我可能错了,但问题不在于您使用的是UTC吗?通过将useUTC设置为false,我认为您将使用日期时间的确切值,无论您的服务器/客户端时区是什么

答案 1 :(得分:1)

您可以按照以下步骤设置Highcharts应使用的时区:

Highcharts.setOptions(global : {
    timezoneOffset: 180
});

timezoneOffset以分钟为单位使用时间

答案 2 :(得分:0)

@Rafael Teles解决方案的替代方法是将时区设置为字符串。

const timezone: string = Intl.DateTimeFormat().resolvedOptions().timeZone;

Highcharts.setOptions({
    time: {
        timezone: timezone
    }
});

DateTimeFormat()函数以字符串形式返回时区,例如“欧洲/奥斯陆”

https://api.highcharts.com/highcharts/time.timezone