Foro de elhacker.net

Programación => PHP => Mensaje iniciado por: DarK_FirefoX en 3 Abril 2015, 17:41 pm



Título: [DUDA] Manejar timestamp
Publicado por: DarK_FirefoX en 3 Abril 2015, 17:41 pm
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
  1. $row = $result->fetch_assoc();
  2. $message_date = $row['message_date']; //Aquí tengo el valor 'timestamp'
  3.  

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
  1. echo date("Y", $message_date);

Citar
Notice: 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
  1. 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?


Título: Re: [DUDA] Manejar timestamp
Publicado por: EFEX en 3 Abril 2015, 18:04 pm
Código
  1. $time =  new DateTime($row['message_date']);
  2. echo date_format($test, 'Y');

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


Título: Re: [DUDA] Manejar timestamp
Publicado por: DarK_FirefoX en 3 Abril 2015, 18:27 pm
Muchas gracias, lo solucione utilizando la siguiente función:

Código
  1. date_parse($message_date);

Esta función funciona de la siguiente manera:

Código
  1. <?php
  2. print_r(date_parse("2006-12-12 10:00:00.5"));
  3. ?>

Devuelve:

Citar
Array
(
    [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



Título: Re: [DUDA] Manejar timestamp
Publicado por: MinusFour en 3 Abril 2015, 21:29 pm
Puedes obtener el timestamp numerico si usas UNIX_TIMESTAMP en tu query.

Código
  1. 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
  1. SELECT YEAR(message_data) FROM tabla