CanvasJS日期问题

问题描述 投票:0回答:1

在尝试将MySql数据显示到CanvasJS图表时,我一直得到错误的日期。数据库的日期是2019年2月和3月,但我一直在1970年1月18日到19日。我首先将日期转换为时间戳,然后将其保存到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>
javascript php laravel canvasjs
1个回答
0
投票

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));
© www.soinside.com 2019 - 2024. All rights reserved.