以下日期示例的正确日期格式是什么:“2018-06-06 14:03:57.973468 +00:00”
What is the correct date format for the following date example: "2018-06-06 14:03:57.973468 +00:00"
我正在使用 PHP 和 laravel nova 在数据库中创建我的模型。我的数据库已经有了它的数据,但是我在从日期类型的列中插入值时遇到了一些问题。
我的数据库是一个以这种格式存储日期的 pgsql:2018-06-06 14:03:57.973468 +00:00
但是当我尝试在我的 via Laravel nova admin 中创建一行时,它会尝试插入以下日期格式:2018-12-22 14:00:00+
日期格式缺少毫秒和时区,我想知道 我必须在 $dateFormat
变量中设置的日期格式:
protected $dateFormat = 'Y-m-d H:i:s+';
public function getDateFormat()
{
return 'Y-m-d H:i:s+';
}
正如您在代码中看到的那样,我使用的是 Y-m-d H:i:s+
格式,但它仅在我从数据库中获取日期时有效,当我尝试插入一行时 returns以下错误:
SQLSTATE[22007]: Invalid datetime format: 7 ERROR: invalid input syntax for type timestamp with time zone: "2018-12-21 14:00:00+" (SQL: insert into "offer" ("column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "created_at") values (, , , , , , , , , , , , , , , , , 2018-12-21 14:00:00+, 2018-12-22 14:00:00+, 283, 2018-12-13 15:44:03+, 2018-12-13 15:44:03+) returning "id")
编辑 1
我将日期格式更新为Y-m-d H:i:s.u P
,错误发生了变化。我使用以下函数检查日期和日期格式是否匹配:
function validateDate($date, $format = 'Y-m-d H:i:s.u P')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
validateDate('2018-06-06 14:03:57.973468 +00:00'); // => true
validateDate('2018-06-06 14:03:57.973468 +00:0022'); // => false
错误变为Unexpected data found. Data missing
就像你在使用Laravel一样,尝试使用Carbon来处理它。
修补程序示例。
>>> use Carbon\Carbon;
>>> $date = Carbon::parse('2018-06-06 14:03:57.973468 +00:00');
=> Carbon\Carbon @1528293837 {#3039
date: 2018-06-06 14:03:57.973468 +00:00,
}
>>> $date->format('Y-m-d H:i:s');
=> "2018-06-06 14:03:57"
同时删除 +
符号,因为您没有在时间格式中传递时区。
使用 Y-m-d H:i:s P
格式。
protected $dateFormat = 'Y-m-d H:i:s P';
public function getDateFormat()
{
return 'Y-m-d H:i:s P';
}
上查看所有可用的格式
我正在使用 PHP 和 laravel nova 在数据库中创建我的模型。我的数据库已经有了它的数据,但是我在从日期类型的列中插入值时遇到了一些问题。
我的数据库是一个以这种格式存储日期的 pgsql:2018-06-06 14:03:57.973468 +00:00
但是当我尝试在我的 via Laravel nova admin 中创建一行时,它会尝试插入以下日期格式:2018-12-22 14:00:00+
日期格式缺少毫秒和时区,我想知道 我必须在 $dateFormat
变量中设置的日期格式:
protected $dateFormat = 'Y-m-d H:i:s+';
public function getDateFormat()
{
return 'Y-m-d H:i:s+';
}
正如您在代码中看到的那样,我使用的是 Y-m-d H:i:s+
格式,但它仅在我从数据库中获取日期时有效,当我尝试插入一行时 returns以下错误:
SQLSTATE[22007]: Invalid datetime format: 7 ERROR: invalid input syntax for type timestamp with time zone: "2018-12-21 14:00:00+" (SQL: insert into "offer" ("column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "column_name", "created_at") values (, , , , , , , , , , , , , , , , , 2018-12-21 14:00:00+, 2018-12-22 14:00:00+, 283, 2018-12-13 15:44:03+, 2018-12-13 15:44:03+) returning "id")
编辑 1
我将日期格式更新为Y-m-d H:i:s.u P
,错误发生了变化。我使用以下函数检查日期和日期格式是否匹配:
function validateDate($date, $format = 'Y-m-d H:i:s.u P')
{
$d = DateTime::createFromFormat($format, $date);
return $d && $d->format($format) == $date;
}
validateDate('2018-06-06 14:03:57.973468 +00:00'); // => true
validateDate('2018-06-06 14:03:57.973468 +00:0022'); // => false
错误变为Unexpected data found. Data missing
就像你在使用Laravel一样,尝试使用Carbon来处理它。
修补程序示例。
>>> use Carbon\Carbon;
>>> $date = Carbon::parse('2018-06-06 14:03:57.973468 +00:00');
=> Carbon\Carbon @1528293837 {#3039
date: 2018-06-06 14:03:57.973468 +00:00,
}
>>> $date->format('Y-m-d H:i:s');
=> "2018-06-06 14:03:57"
同时删除 +
符号,因为您没有在时间格式中传递时区。
使用 Y-m-d H:i:s P
格式。
protected $dateFormat = 'Y-m-d H:i:s P';
public function getDateFormat()
{
return 'Y-m-d H:i:s P';
}
上查看所有可用的格式