Каков правильный формат даты для следующего примера: «2018-06-06 14: 03: 57.973468 +00: 00» - PullRequest
0 голосов
/ 13 декабря 2018

Я использую PHP с laravel nova для создания своих моделей в базе данных.В моей базе данных уже есть данные, но у меня есть некоторые проблемы для вставки значений в столбцы типа даты.

Моя база данных - это pgsql, в котором дата хранится в следующем формате: 2018-06-06 14:03:57.973468 +00:00

Нокогда я пытаюсь создать строку в моем администраторе через Laravel nova, он пытается вставить следующую дату formart: 2018-12-22 14:00:00+

В дате formart отсутствуют миллисекунды и часовой пояс, я хотел бы знать дату ведьмыформат, который я должен установить в моей переменной $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+, но он работает только тогда, когда я получаю дату из БД,при попытке вставить строку возвращает следующую ошибку:

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

Я обновил дату formart до Y-m-d H:i:s.u P, и ошибка изменилась.Я проверяю, совпадают ли дата и дата formart, используя следующую функцию:

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

Ответы [ 2 ]

0 голосов
/ 13 декабря 2018

используйте формат 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';
}

Вы можете проверить все форматы, доступные на http://php.net/manual/en/function.date.php

0 голосов
/ 13 декабря 2018

Как вы используете 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"

Также удалите знак +, потому что вы не проходите часовой поясв формате времени.

...