如何在laravel中按自定义时间格式订购?

时间:2017-06-07 06:25:25

标签: php mysql database laravel eloquent

我必须订购一个具有自定义时间格式的数据库表。
表中使用的时间格式如下:

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对此进行排序。

5 个答案:

答案 0 :(得分:0)

您可以使用STR_TO_DATE功能,如:

SELECT
  start_time
FROM
  tablename
ORDER BY
  STR_TO_DATE(start_time, '%l:%i %p');

为此,您必须使用raw查询。

Reference

答案 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);