Tengo una duda que no logro ver como resolver.
Explico, tengo una tabla en una base de datos MySQL donde tengo un campo de tipo
timestamp, cuyo valor para
DEFAULT es
CURRENT_TIMESTAMP. Todo bien hasta ahora, ahi se almacena un valor así:
2015-03-31 14:21:00.
El problema es que quiero usar eso por decirlo de alguna manera para mostrarlo como una fecha, digámos que quiero de ahi saber(separar) el día, mes, año y la hora para luego mostrarla como una fecha así:
Martes 31 de Marzo de 2015 a las 14:21:00.
Digámos que tengo:
$row = $result->fetch_assoc();
$message_date = $row['message_date']; //Aquí tengo el valor 'timestamp'
Pero, esto no me devuelve un valor numérico correcto, creo que me lo devuelve en forma de
string (según
var_dump())
Por lo tanto al utilizar la función:
echo date("Y", $message_date);
CitarNotice: A non well formed numeric value encountered in F:\System\Archivos de programa\XAMPP\htdocs\questions\functions\users.php on line 216
1970
Donde
1970 es el valor que muestra. Por lo que puedo decir que me falta hacerle algo a la variable $message_date. Intente utilizando
echo date("Y", (int)$message_date);
Me quita la Notificación, pero sigue dando
1970Voy a crear una función que tendrá unos arrays con los meses y días, pero necesito saber como manipular correctamente este "timestamp" de MySQL en PHP.
Alguien me puede ayudar. Saludos
PD: Tengo PHP/5.4.7
Modifico: Estaba pensando y me surgió la siguiente pregunta: ¿Sería mejor cambiar el tipo de dato del campo en la tabla a DateTime?
Muchas gracias, lo solucione utilizando la siguiente función:
date_parse($message_date);
Esta función funciona de la siguiente manera:
<?php
print_r(date_parse("2006-12-12 10:00:00.5"));
?>
Devuelve:
CitarArray
(
[year] => 2006
[month] => 12
[day] => 12
[hour] => 10
[minute] => 0
[second] => 0
[fraction] => 0.5
[warning_count] => 0
[warnings] => Array()
[error_count] => 0
[errors] => Array()
[is_localtime] =>
)
Exactamente lo que quería hacer.
De todas formas voy a probar lo que dices
EFEX
Puedes obtener el timestamp numerico si usas UNIX_TIMESTAMP en tu query.
SELECT UNIX_TIMESTAMP(message_date) FROM tabla
De ahi puedes darle el formato que tu quieras con date. Si solo quieres sacar el año:
SELECT YEAR(message_data) FROM tabla