У меня есть таблица со строковыми значениями в формате пятницы 20 апреля 2012 года в поле под названием Film_Release
Я зацикливаюсь, и я хочу преобразовать их в datetime и развернуть их в другую таблицу. Моя вторая таблица имеет столбец Films_Date с форматом DATE. Я получаю эту ошибку
Объект класса DateTime не может быть преобразован в строку
$dateFromDB = $info['Film_Release']; $newDate = DateTime::createFromFormat("l dS FY",$dateFromDB); //( http:php.net/manual/en/datetime.createfromformat.php)
Затем я вставляю $ newdate в таблицу через команду insert.
Почему я получаю такую ошибку?
Поскольку $newDate
является объектом типа DateTime
, а не строкой. Документация ясна:
Возвращает новый объект
DateTime
отформатированный в соответствии с указанным форматом.
Если вы хотите преобразовать из строки в DateTime
обратно в строку, чтобы изменить формат, вызовите DateTime::format
в конце, чтобы получить форматированную строку из вашего DateTime
.
$newDate = DateTime::createFromFormat("l dS FY", $dateFromDB); $newDate = $newDate->format('d/m/Y'); // for example
Попробуй это:
$Date = $row['valdate']->format('d/m/Y'); // the result will 01/12/2015
ПРИМЕЧАНИЕ: $row['valdate']
– дата даты в базе данных
Используйте это: $newDate = $dateInDB->format('Ym-d');
Вы пытаетесь вставить $newdate
в свой db. Сначала вам нужно преобразовать его в строку. Используйте метод DateTime::format
для преобразования обратно в строку.
Убедитесь, что есть дата выпуска фильма; если дата отсутствует, вы не сможете форматировать не-объект.
if ($info['Film_Release']){ //check if the date exists $dateFromDB = $info['Film_Release']; $newDate = DateTime::createFromFormat("l dS FY", $dateFromDB); $newDate = $newDate->format('d/m/Y'); } else { $newDate = "none"; }
или
$newDate = ($info['Film_Release']) ? DateTime::createFromFormat("l dS FY", $info['Film_Release'])->format('d/m/Y'): "none"
Это своего рода оффтоп, но я пришел сюда из той же ошибки. Для меня эта ошибка появилась, когда я выбирал поле datetime из базы данных mssql и позже использовал его в php-скрипте. как это:
$SQL="SELECT Created FROM test_table"; $stmt = sqlsrv_query($con, $SQL); if( $stmt === false ) { die( print_r( sqlsrv_errors(), true)); } $Row = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC); $SQL="INSERT INTO another_test_table (datetime_field) VALUES ('".$Row['Created']."')"; $stmt = sqlsrv_query($con, $SQL); if( $stmt === false ) { die( print_r( sqlsrv_errors(), true)); }
оператор INSERT выдавал ошибку: Object of class DateTime could not be converted to string
Я понял, что вы НЕ МОЖЕТЕ просто выбрать дату-время из базы данных:
SELECT Created FROM test_table
НО вы должны использовать CONVERT для этого поля:
SELECT CONVERT(varchar(24),Created) as Created FROM test_table