如何格式化 Laravel 5.8 从 "Thu Apr 11 2019 00:00:00 GMT+0200" 到 MySQL 格式的日期?
How to format date in Laravel 5.8 From "Thu Apr 11 2019 00:00:00 GMT+0200" to MySQL format?
我正在为一个学校应用程序开发后端,我在将我从 "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]);
}
在我的服务器上这有效:
function gmt2mysql($gmt)
{
return date("Y-m-d H:i:s", strtotime($gmt));
}
和
Thu Apr 11 2019 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');
}
这里我们假设您日期中的时区偏移量始终为格林威治标准时间。是吗?
您可以使用 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]);
}
我正在为一个学校应用程序开发后端,我在将我从 "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]);
}
在我的服务器上这有效:
function gmt2mysql($gmt)
{
return date("Y-m-d H:i:s", strtotime($gmt));
}
和
Thu Apr 11 2019 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');
}
这里我们假设您日期中的时区偏移量始终为格林威治标准时间。是吗?
您可以使用 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]);
}