我必须订购一个具有自定义时间格式的数据库表。
表中使用的时间格式如下:
1:30:PM
8:35:PM
5:50:PM
晚上7点
我尝试了以下操作,但它没有按照正确的顺序对它们进行排序。
->orderBy('time_schedule.start_time', 'asc');
使用上述方法排序后,结果如
1:30:PM
5:50:PM
8:35:PM
晚上7点
我无法更改保存的格式,因为我没有处理应用程序的这一部分。
此外,数据必须从laravel排序,在我的情况下不能使用前端排序。
请告诉我是否有办法用laravel对此进行排序。
答案 0 :(得分:0)
您可以使用STR_TO_DATE
功能,如:
SELECT
start_time
FROM
tablename
ORDER BY
STR_TO_DATE(start_time, '%l:%i %p');
为此,您必须使用raw
查询。
答案 1 :(得分:0)
您可以使用更接近的
->orderBy(function($item) {
return Carbon::createFromFormat('g:i a', $item->date)->format('Y-m-d H:i:s);
});
答案 2 :(得分:0)
您可以在此处尝试SQL日期函数:
ORDER BY DATE(time_schedule.start_time) DESC, time_schedule.start_time ASC
希望这有帮助。
答案 3 :(得分:0)
您无法以自定义格式(如01:00 AM)向数据库添加时间戳。您需要将其格式化为24小时,然后将其存储到数据库
所以在检索order by子句期间会给你排序顺序
$time = '01:00 PM';
$date = date_format(date_create($time),'H:i:s');
\App\TableModel::insert(['start_time'=>$date]);
or
DB::table('tablename')->insert(['start_time'=>$date]);
retrive by order.......
DB::table('tablename')->orderBy('start_time')->get();
有关详细信息,请参阅参考:Insert h:mm pm/am time format into database using MYSQL
答案 4 :(得分:0)
试试这个!
$tab = array(array(1,2,3), array(4,5,6), array(7,8,9));
$b = array_shift($tab);
print_r($b);