如何在controller/lavel中为公共函数添加日期时间格式作为关键字(stdClass)



所以我试图从数据库中获取图表的数据,我希望它能显示每天的订单数量。我试过这个代码,它从数据库中给出了完整的未格式化日期。关于如何将其更改为日期/月份,有什么想法吗??

$data = DB::table('analytics')->get();
$attrs = array();


foreach ($data as $key => $value) {

// -> as it return std object
$attrs[$value->created_at][] = $value->order;
}


// dd($attrs);
return view('analytic::dashboard.test', compact('attrs'));

$value->created_at是完整的日期/时间字符串。既然你想按日期组织它,那么你需要先格式化它。值得庆幸的是,Laravel的时间戳会自动转换为Carbon,因此很容易格式化

$attrs[$value->created_at->toDateString()][] = $value->order;

如果你只想要年/月,那么使用format()而不是

$attrs[$value->created_at->format('Y-m')][] = $value->order;

编辑我现在看到您使用的是查询生成器(DB(,而不是Eloquent,所以您实际上需要单独解析时间戳。

$date = Carbon::create($value->created_at);
$attrs[$date->toDateString()][] = $value->order; // 2021-07-14
$attrs[$date->format('Y-m')][] = $value->order;  // 2021-07

如果您正在使用集合,则

$user=DB::table('analytics')->get()
->mapToDictionary(function ($analytics){
$date=Carbon::parse($analytics->created_at)->format('d-m-Y');
$data[$date]=$analytics->order;
return $data;
})->toArray();

我的建议是使用Eloquent而不是DB查询生成器。如果您有一个Analytic模型,那么这非常简单。您只需将created_at添加到$dates数组中,它就会自动转换为Carbon实例。例如,在您的模型中:

protected $dates = ['created_at'];

最新更新