[DUDA] Manejar timestamp

Iniciado por DarK_FirefoX, 3 Abril 2015, 17:41 PM

0 Miembros y 1 Visitante están viendo este tema.

DarK_FirefoX

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:

Código (php) [Seleccionar]

$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:

Código (php) [Seleccionar]
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

Código (php) [Seleccionar]
echo date("Y", (int)$message_date);

Me quita la Notificación, pero sigue dando 1970

Voy 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?

EFEX

Código (php) [Seleccionar]
$time =  new DateTime($row['message_date']);
echo date_format($test, 'Y');


Si no me equivoco.. y de hay le das el formato.
GITHUB 

DarK_FirefoX

Muchas gracias, lo solucione utilizando la siguiente función:

Código (php) [Seleccionar]
date_parse($message_date);

Esta función funciona de la siguiente manera:

Código (php) [Seleccionar]
<?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


MinusFour

Puedes obtener el timestamp numerico si usas UNIX_TIMESTAMP en tu query.

Código (mysql) [Seleccionar]

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:

Código (mysql) [Seleccionar]
SELECT YEAR(message_data) FROM tabla