CanvasJS дата выпуска - PullRequest
       10

CanvasJS дата выпуска

0 голосов
/ 12 марта 2019

Я получаю неправильную дату при попытке отобразить данные 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>

1 Ответ

0 голосов
/ 14 марта 2019

Отметка времени 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));
...