Проблема с датой CanvasJS

Я продолжаю получать неправильную дату при попытке отобразить данные MySql на диаграмме CanvasJS. Даты из базы данных относятся к февралю и марту 2019 года, но я продолжаю получать 18-19 января 1970 года. Сначала я конвертирую дату в метку времени, а затем сохраняю ее в dataPoints. Я проверил онлайн-конвертер временных меток, и кажется, что временные метки верны при преобразовании обратно в дату.

Это код от контроллера:

    public function generate(Request $request) {
        if ($request->tip == 0) {
    $uid = Auth::id();
                $data= DB::select(DB::raw("SELECT 1 AS tip, prihodi.iznos, vrste_prihoda.naziv, prihodi.datum AS datum FROM prihodi LEFT JOIN vrste_prihoda ON vrste_prihoda.id = prihodi.vrsta_prihoda_id WHERE prihodi.datum >= '$request->od_datum' AND prihodi.datum <= '$request->do_datum' AND prihodi.user_id = '$uid' UNION SELECT 2 AS tip, izdaci.iznos, vrste_izdataka.naziv, izdaci.datum AS datum FROM izdaci LEFT JOIN vrste_izdataka ON vrste_izdataka.id = izdaci.vrsta_izdatka_id WHERE izdaci.datum >= '$request->od_datum' AND izdaci.datum <= '$request->do_datum' AND izdaci.user_id = '$uid' ORDER BY datum"));
            $tip = 0;
        } else if ($request->tip == 1) {
    $data = DB::table('prihodi')->select('iznos', 'datum', 'naziv')->join('vrste_prihoda', 'vrste_prihoda.id', 'prihodi.vrsta_prihoda_id')->where('prihodi.user_id', Auth::id())->where('datum', '>=', $request->od_datum)->where('datum', '<=', $request->do_datum)->orderBy('datum')->get();
    $tip = 1;
    } else if ($request->tip == 2) {
        $data = DB::table('izdaci')->select('iznos', 'datum', 'naziv')->join('vrste_izdataka', 'vrste_izdataka.id', 'izdaci.vrsta_izdatka_id')->where('izdaci.user_id', Auth::id())->where('datum', '>=', $request->od_datum)->where('datum', '<=', $request->do_datum)->orderBy('datum')->get();
$tip = 2;
    }
     $dataPoints = array();
     $y = 0;
foreach($data as $item) {
if ($tip == 0) {
            if ($item->tip == 2) {
            $y = $y - $item->iznos;
            } else {
            $y = $y + $item->iznos;
            }
        } else if ($tip == 1) {
        $y = $y + $item->iznos;
    } else if ($tip == 2) {
    $y = $y - $item->iznos;
}
$date = $item->datum;
$newDate = date("d-m-Y", strtotime($date . '-1 Month'));
list($day, $month, $year) = explode('-', $newDate);
$x = mktime(0, 0, 0, $month, $day, $year);
 array_push($dataPoints,array("x" => $x, "y" => $y));
}
        return view('generate')->with('dataPoints', $dataPoints);

    }

И в представлении у меня есть следующий скрипт:

<script type = "text/javascript">
window.onload = function () {
    var chart = new CanvasJS.Chart("chartContainer",
    {
        title: {
            text: "Primanja/izdaci za odabrani period"               
        },
        axisY: {
          valueFormatString: "#,###"
      },
      axisX:{
        title: "time",
        gridThickness: 2,
        interval:2, 
        intervalType: "day",        
        valueFormatString: "hh TT K", 
        labelAngle: -20
      },
      data: [
      {        
        type: "area",
        color: "rgba(0,75,141,0.7)",
    xValueType: "dateTime",
        dataPoints: <?php echo json_encode($dataPoints, JSON_NUMERIC_CHECK); ?>

    }

    ]
});

chart.render();
}
</script>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
282
1

Ответы 1

Временная метка JavaScript указывается в миллисекундах, а временная метка PHP — в секундах. В результате вы получаете очень разные даты, отличающиеся в 1000 раз. Умножение метки времени PHP на 1000 перед передачей ее на диаграмму должно работать нормально в вашем случае.

$date = $item->datum;
$newDate = date("d-m-Y", (strtotime($date . '-1 Month') * 1000));
list($day, $month, $year) = explode('-', $newDate);
$x = mktime(0, 0, 0, $month, $day, $year);
array_push($dataPoints,array("x" => $x, "y" => $y));

Другие вопросы по теме