如何在Laravel 5.8中格式化日期从“ Thu Apr 11 2019 00:00:00 GMT + 0200”到MySQL格式?

时间:2019-04-29 10:40:37

标签: php mysql laravel laravel-5 php-carbon

我正在为学校应用程序后端工作,但在将诸如“ Thu Apr 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 个答案:

答案 0 :(得分:2)

在我的服务器上,该方法有效:

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

  

2019年4月11日星期四00:00:00 GMT + 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');
}

在此我们假设您日期中的时区偏移将始终为格林尼治标准时间。是吗?

答案 1 :(得分:1)

您可以使用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]);
    }