Как мне отформатировать даты по оси X, используя метку времени UNIX с CanvasJS - PullRequest
0 голосов
/ 18 февраля 2019

Я пытаюсь создать график подсвечника с помощью CanvasJs, и в настоящее время у меня возникают проблемы с форматированием оси X правильно, чтобы показать даты.

Я извлекаю эти данные из базы данных.Когда я извлекаю дату из базы данных, я извлекаю ее как метку времени UNIX.Я хочу, чтобы ось X показывала дату для каждой точки данных (я хочу делать это ежемесячно, но я буду беспокоиться об этом позже, как только получу это).Я попытался использовать «метка» и «х» для точек даты на оси X.

array_push($dataPoints, array("label"=>$row->day, "y"=> array($row->openPrice, $row->high, $row->low, $row->closePrice)));.

А вот что у меня есть для создания графика.window.onload = function () {

        var chart = new CanvasJS.Chart("chartContainer", {
            zoomEnabled:true,
            title: {
                text: "Apple Historical Prices"
            },
            axisX: {
                labelFormatter: function (e) {
                    return CanvasJS.formatDate( e.value, "DD MMM");
                },
                valueFormatString: "DD MMM"
            },
            axisY: {
                includeZero: false,
                prefix: "$"
            },
            data: [{
                type: "candlestick",
                xValueType: "dateTime",
                yValueFormatString: "$###.##",
                dataPoints: <?php echo json_encode($dataPoints, JSON_NUMERIC_CHECK); ?>
            }]
        });
        chart.render();

        }

Что мне нужно изменить здесь, чтобы правильно отформатировать ось X для отображения даты (конвертировать из метки времени UNIX)

В настоящее время этоотображает только «DEC 31» для каждой точки данных.

1 Ответ

0 голосов
/ 18 февраля 2019

Zack,

Вы передаете метку и значение y в dataPoints, тогда как xValueType применимо для x-значений .Поскольку вы не передаете значения x в dataPoints, библиотека автоматически генерирует их как 1,2,3,4,5 ..., что дает вам нежелательные результаты в labelFormatter.

Вы можете конвертировать Unixотметка времени в JavaScript отметка времени , умножив ее на 1000. Затем передайте это значение как 'x' в dataPoints.

array_push($dataPoints, array("x"=>strtotime($row->day)*1000, "y"=> array($row->openPrice, $row->high, $row->low, $row->closePrice)));.
...