Как отформатировать дату в Laravel 5.8 От «Четверг 11 апреля 2019 00:00:00 GMT + 0200» до формата MySQL? - PullRequest
3 голосов
/ 29 апреля 2019

Я работаю над бэкэндом для приложения для школы, и у меня возникла проблема с преобразованием даты, полученной из запроса типа «Чт, 11 апреля 2019 00:00:00 GMT + 0200», в формат MySQL (отметка времени).


public function getAll(Request $request){
        $start = $request->input('start');
        $end = $request->input('end');

        // we receive some thing like:
        // Thu Apr 11 2019 00:00:00 GMT+0200 (Central European Summer Time)
        $sales = Sale::with('SaleLine.lens','SaleLine.cadre','cli_sale')
                    ->whereBetween('created_a', [$start, $end])
                    ->orderBy('id', 'desc')->get();

        for ($i=0; $i < count($sales); $i++) {
            $sales[$i]['client_name'] = $sales[$i]['cli_sale']['first_name'] . " " . $sales[$i]['cli_sale']['last_name'];
        }
        return response()->success(['sales'=>$sales]);
    }

Ответы [ 2 ]

2 голосов
/ 29 апреля 2019

На моем сервере это работает:

function gmt2mysql($gmt)
{
    return date("Y-m-d H:i:s", strtotime($gmt));
}

и

Четверг 11 апреля 2019 00:00:00 по Гринвичу + 0200

становится

2019-04-10 22: 00: 00

, который может понять MySQL. Это тип DATETIME.

Тщательно проверьте, действительно ли это работает для вас. Работать со временем может быть сложно.

Очевидно, что он не работает на вашем сервере, поэтому мы должны быть немного более явными. Вы можете попробовать это альтернативное:

function gmt2mysql($gmt)
{
    $date = DateTime::createFromFormat("D M j Y H:i:s ???O", $gmt);
    $date->setTimezone(timezone_open('GMT'));
    return $date->format('Y-m-d H:i:s');
}

Здесь мы предполагаем, что смещение часового пояса в ваших датах всегда будет GMT. Это так?

1 голос
/ 29 апреля 2019

Вы можете использовать Carbon::parse() и получить его как

>>> Carbon\Carbon::parse('Thu Apr 11 2019 00:00:00 GMT+0200')
    => Carbon\Carbon @1554933600 {#3119
         date: 2019-04-11 00:00:00.0 +02:00,
       }
>>> Carbon\Carbon::parse('Thu Apr 11 2019 00:00:00 GMT+0200')->toDateTimeString(
);
=> "2019-04-11 00:00:00"

Переписать ваш код будет

public function getAll(Request $request){
        $start = $request->input('start');
        $end = $request->input('end');
        $start = Carbon\Carbon::parse($start)->toDateTimeString();
        $end = Carbon\Carbon::parse($end)->toDateTimeString();
        // we receive some thing like:
        // Thu Apr 11 2019 00:00:00 GMT+0200 (Central European Summer Time)
        $sales = Sale::with('SaleLine.lens','SaleLine.cadre','cli_sale')
                    ->whereBetween('created_at', [$start, $end])
                    ->orderBy('id', 'desc')->get();

        for ($i=0; $i < count($sales); $i++) {
            $sales[$i]['client_name'] = $sales[$i]['cli_sale']['first_name'] . " " . $sales[$i]['cli_sale']['last_name'];
        }
        return response()->success(['sales'=>$sales]);
    }
...