2012-04-18 13 views
29

Tengo una tabla con los valores de cadena en el formato de viernes 20 de abril de 2012 en un campo llamado Film_Releaseobjeto de la clase DateTime no podía ser convertido a cadena

estoy recorriendo y quiero convertirlos en datetime y desplegarlos en otra tabla. Mi segunda tabla tiene una columna llamada Films_Date, con un formato de DATE. Estoy recibiendo este error

objeto de la clase DateTime No se pudo convertir a cadena

$dateFromDB = $info['Film_Release']; 
$newDate = DateTime::createFromFormat("l dS F Y",$dateFromDB); //(http:php.net/manual/en/datetime.createfromformat.php) 

entonces inserto $ NewDate en la tabla a través de un comando de inserción.

¿Por qué estoy recibiendo un error?

Respuesta

52

Porque $newDate es un objeto del tipo DateTime, no una cadena. El documentation es explícita:

Returns new DateTime object formatted according to the specified format.

Si desea convertir de una cadena a DateTime de nuevo a cadena para cambiar el formato, llame DateTime::format al final para obtener una cadena con formato de su DateTime.

$newDate = DateTime::createFromFormat("l dS F Y", $dateFromDB); 
$newDate = $newDate->format('d/m/Y'); // for example 
+1

Hola, he intentado y me sale este error - Llamar a un formato de función de miembro() en un objeto – DIM3NSION

+0

@ DIM3NSION: No es posible con el código anterior a menos que 'createFromFormat' no devuelva un objeto, lo que significa que devolvió 'false' porque la entrada no es válida. Lea la [documentación] (http://www.php.net/manual/en/datetime.createfromformat.php) y corrija la entrada. – Jon

+0

¿Qué tipo de campo usaría para insertar $ new date? lo tengo trabajando ahora – DIM3NSION

0

Está tratando de insertar $newdate en su db. Primero debe convertirlo en una cadena. Use el método DateTime::format para convertir de nuevo a una cadena.

+0

hola, he tratado de usar el formato pero recibo un error - Llamar a un formato de función de miembro() en un objeto no – DIM3NSION

0

Asegúrate de que haya una fecha de lanzamiento de la película; si falta la fecha, no podrá formatear en un no objeto.

if ($info['Film_Release']){ //check if the date exists 
    $dateFromDB = $info['Film_Release']; 
    $newDate = DateTime::createFromFormat("l dS F Y", $dateFromDB); 
    $newDate = $newDate->format('d/m/Y'); 
} else { 
    $newDate = "none"; 
} 

o

$newDate = ($info['Film_Release']) ? DateTime::createFromFormat("l dS F Y", $info['Film_Release'])->format('d/m/Y'): "none" 
2

Utilice esta: $newDate = $dateInDB->format('Y-m-d');

10

Prueba esto:

$Date = $row['valdate']->format('d/m/Y'); // the result will 01/12/2015 

NOTA: $row['valdate'] su fecha valor en la base de datos

+1

Resuelve el problema :) – DiChrist

0

Es un poco offtopic, pero vine aquí de google el mismo error. Para mí, este error apareció cuando estaba seleccionando el campo de fecha y hora de la base de datos mssql y luego lo uso en php-script. así:

$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)); 
} 

la instrucción INSERT estaba dando error: Object of class DateTime could not be converted to string

me di cuenta de que NO PUEDE simplemente seleccionar la fecha y hora de la base de datos:

SELECT Created FROM test_table 

PERO se tiene que usar CONVERTIR para este campo:

SELECT CONVERT(varchar(24),Created) as Created FROM test_table 
+0

usa los parámetros Kenny, están ahí para y mágicamente se convertirá desde objetos de DateTime '' sqlsrv_query ($ con, "INSERT INTO tablename (dtfield) VALUES (?)", array ($ datetime)) ' – GDmac

Cuestiones relacionadas