我有一个.Net Core应用程序,我在其中绘制一个图表,显示当天某些测量值。
我的"时间" object在Unix时间内,以毫秒为单位(例如1502258405000)。我已设法将其手动转换为时间对象,如下所示:
@ modified.align[toGen.Repr]
res14: toGen.Repr = 1 :: S1 :: S2 :: 1 :: 1 :: 1 :: HNil
然而,通过这种转换,我的chart.js图表并不能将时间对象理解为时间,这意味着(如果测量中存在间隙)它不会显示(并且存在),如它只是将测量值彼此相邻并将它们作为字符串处理。
我对显示日期不感兴趣,因为数据总是会在已知日期内收集。我将上面的实现改为:
var datetimes = $.map(data, function (value, index) {
var datetime = new Date(value.timestamp);
var iso = datetime.toISOString().match(/(\d{4}\-\d{2}\-\d{2})T(\d{2}:\d{2}:\d{2})/);
return iso[2]; //Returns HH:MM:SS
});
然而,当我在我的chart.js折线图上绘制它时,它使我的图表显示不希望的AM / PM值,如上所示。我想要24小时制。我使用了var datetimes = $.map(gpsData, function (value, index) {
return new Date(value.timestamp);
});
的chart.js时间值,如下图所示,绘制了如上图所示的值:
xAxis
但是,值未格式化为我想要的输出。所以我想知道使用chart.js将一天中的时间添加到我的图表上的x轴的正确方法是什么,甚至是如何将其格式化为我想要的值?
答案 0 :(得分:2)
实际上,这是受支持的(至少在最新版本的chartjs中)。
似乎您必须为chartjs可以显示的所有不同格式指定格式。
检查: https://www.chartjs.org/docs/latest/axes/cartesian/time.html#display-formats
在我的项目中,以下对我有用:
xAxes: [{
type: 'time',
time: {
parser: timeFormat,
// round: 'day'
tooltipFormat: 'YYYY-MM-DD HH:mm',
displayFormats: {
millisecond: 'HH:mm:ss.SSS',
second: 'HH:mm:ss',
minute: 'HH:mm',
hour: 'HH'
}
},
display: true,
scaleLabel: {
display: true,
labelString: 'Time'
}
}],
答案 1 :(得分:1)
尝试一下:
scales: {
xAxes: [{
type: 'time',
time: {
unit: 'minute',
unitStepSize: 30,
displayFormats: {
'minute': this.person.Use24h ? 'HH:mm' : 'hh:mm A'
}
}
}]
}
答案 2 :(得分:0)
使用Chart.js v2.9.4,对我来说这是可行的:
scales: {
xAxes: [{
type: 'time',
time: {
displayFormats: {hour: 'HH:mm'}
}
}]
}
答案 3 :(得分:-1)
我发现这对Chart.js来说是不可能的,所以我转而使用Highcharts.js,它支持这个功能。
以下是我的解决方案代码:
function tripSpeedsLineGraph() {
var gpsData = @Html.Raw(Json.Serialize(Model.gpsData));
chartData = []
var reqData = $.map(gpsData, function (value, index) {
chartData.push([new Date(value.timestamp), value.sp]);
});
var chart = Highcharts.chart('tripSpeedsLineChart', {
chart: {
type: 'spline',
zoomType: 'x',
panning: true,
panKey: 'shift'
},
title: {
text: "Speed during trip"
},
subtitle: {
text: 'Click and drag to zoom in. Hold down shift key to pan.'
},
xAxis: {
type: 'datetime',
dateTimeLabelFormats: {
day: '%b %H:%M:%S'
},
title: {
text: 'Time of day'
}
},
yAxis: {
title: {
text: 'Speed'
},
min: 0
},
tooltip: {
crosshairs: [true],
formatter: function () {
return "Datetime: " + moment.utc(moment.unix(this.x/1000)).format("DD/MM-YYYY HH:mm:ss") + "<br> Speed: " + this.y;
}
},
series: [{
name: 'Speed Data',
data: chartData
}]
});
}
最终结果如下: