New question

Question:

 
  2  
 
Date: 22-06-2017 23:29:55 (In Spanish)

Trabajando con FECHAS, ¿cómo lo hacéis?[Resolved]

Hola compañeros,

en este caso no vengo con un problema, tan solo una curiosidad. Voy a contar mi experiéncia y a ver si intercambiando experiencias y/o opiniones puedo averiguar qué es más standar...

Cuando estudié programación, el profesor de PHP que tenía en aquellos entonces nos enseñó que para trabajar con fechas era mejor y más cómodo guardar los timestamp en la bbdd en un campo int y a la hora de mostrar transformarlo a fecha con date(), varios años después en una empresa que trabajé me dijeron que eso estaba muy mal hecho y que no se debía trabajar así, por lo tanto y desde aquel momento empecé a trabajar guardando la fecha y en la bbdd el campo en vez de un int era un campo date o date time.

Años después me encontré con otra empresa que me decía que no, que la forma correcta es trabajar con timestamp por que si hago una aplicación internacional,(y ya no me acuerdo que me explicaron del tema de las diferencias horarias).

Bueno y vosotros cómo lo hacéis y por qué?

Tags: DateTime - MySQL - Opinion - PHP - Question - Suggestion - Timestamp Votes: 2 - Answers: 4 - Views: 22 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 23-06-2017 01:53:33 Hola Fran:

    Decía también mi "profe" que lo importante no era el camino que tomábamos sino que el resultado sea el correcto. El tiempo me ha confirmado que para llegar a Roma existen muchos caminos.

    Otra cosa es que utilicemos el más complejo pudiéndo hacerlo más sencillo (las buenas prácticas). Y en las empresas (y me parece bien) en los casos como el que presentas traten de unificar un único método.

    Personalmente:
    Para base de datos utilizo DATETIME
    Veamos los métodos a elegir (entiendo que todos son correctos):

    DATE. MySQL recupera y muestra los valores de DATE en 'YYYY-MM-DD' . El rango admitido es '1000-01-01' a '9999-12-31' .

    DATETIME. MySQL recupera y muestra los valores DATETIME en 'YYYY-MM-DD HH:MM:SS' . El rango admitido es '1000-01-01 00:00:00' a '9999-12-31 23:59:59' .

    TIMESTAMP. Tiene un rango de '1970-01-01 00:00:01' UTC a '2038-01-19 03:14:07' UTC.
    Podría entenderse lo que te decían ya que a la hora UTC deberíamos sumar o restar la diferencia horaria de cada país.

    Diría que para mí me es más importante la presentación de la fecha (la cadena del formato). el que siempre utilizo es date("Y-m-d H:i:s") siendo válidos todos.

    Respecto a las diferencias horarias he trabajado muy poco y como ejercicio académico más que práctico.
    En http://php.net/manual/es/timezones.php están las zonas horarias, que podríamos forzarlas en la programación.

    Un ejercicio muy simple; timestamp (el número de segundos transcurridos desde la medianoche del 1 de enero de 1970), hora UTC, hora actual local (la de cada cual) y la de Tokio:
    <?php
    // La hora timestamp (el número de segundos transcurridos desde la medianoche del 1 de enero de 1970)
    $t=time();
    echo "El actual timestamp es " . $t . "<br>";
    // pasado al lenguaje entendible sobre UTC
    date_default_timezone_set('UTC');
     $timestamp=date('Y-m-d H:i:s', time());
    echo "La hora UTC es ". $timestamp;
    ?>
    <br>
    <?php
    // mi hora actual local
    $ahora = date("Y-m-d H:i:s");
    echo "Mi hora actual es ".$ahora;
    ?>
    <br>
    <?php
    // la hora actual en Tokio
    date_default_timezone_set('Asia/Tokyo');
    echo "La hora actual en Tokio es ". date("Y-m-d H:i:s");
    ?>


    P.D.: reedito el código para visualizar timestam, UTC, etc.

    Saludos
      Votes: 2 - Link answer
     
  • Date: 24-06-2017 03:49:17 Hola Fran, concuerdo con lo aportado por nuestro colega Txema (genio total, muchas gracias por la calidad de tus respuestas).

    Solo me gustaría agregar una advertencia para TIMESTAMP y mi opinión / sugerencia.

    Con respecto a TIMESTAMP, ojo, porque como bien comenta Txema, este tipo de dato esta limitado hasta el año 2038 (ya no parece tan lejano este año, no?) y esta es nuestra próxima "tormenta solar" conocida como la Y2K38, ya que en el año 2038 podría suceder que gran parte del software mundial falle (si buscan en Google encontraran todo tipo de opiniones y comentarios apocalípticos, jajaja).

    Para los que recuerdan la falla del año 2000, la famosa Y2K, aquí les dejo un fragmento de Los Simpson satirizando el Y2K jajaja, muy bueno.

    Y2K Simpson



    Traducción española: https://www.youtube.com/watch?v=Vwvix4ahHEk (a mi entender no es tran graciosa, pero en vista que en este post hoy 2 españoles, aquí se las dejo).

    Volviendo al tema, respecto a mi opinión / sugerencia, yo utilizo los tipos de datos especificos siempre que es posible (DATE, DATETIME, TIME...) y cuando no es posible (por ejemplo algunas bases de datos que no soportan estos tipos de datos y/o software legacy) me adapto, con esto quiero decir TIMESTAMP, INT, VARCHAR..., tomando las palabras de Txema "...para llegar a Roma existen muchos caminos..."

    Con respecto al timezone, en los casos que se requiera manejar fecha y hora de distintos países (la famosa internacionalización) yo genero y guardo todo en UTC y al momento de presentarlo al usuario utilizo la conversión de UTC al timezone correspondiente a su país.

    Saludos y buen fin de semana :)

    Editado (agregado):
    Les dejo esta explicación cortita que simplifica los conceptos UTC, GMT y Zulu (para que no se vuelvan locos con todos esos conceptos).
    El UTC son siglas en ingles que se corresponden con "Universal Time Coordinated" o en español "Tiempo Universal Coordinado", que antiguamente fue llamado "la hora del meridiano de Greenwich"("GMT") o el "tiempo Zulu" ("Z"). En otras palabras, es la hora local en el Meridiano cuya longitud es 0°.
      Votes: 1 - Link answer
     
  • Date: 24-06-2017 13:30:38 Es puntual tu agregado (UTC, GMT y Zulu), Fernando.

    Ya en otro tema del foro (setiembre de 2015) comentaba tu agregado, un poco más amplio, a petición de Walter (http://www.phpcentral.com/pregunta/274/objeto-datetime-conversion-de-formatos#resp_1bc0249a6412ef49b07fe6f62e6dc8de)

    Para los curiosos podéis leer el tema en Wikipedia (Tiempo universal coordinado)
    Lo de la hora Zulú, de uso militar/aeronáutico y que es la misma hora UTC, sí que es más dificil de explicar: cómo entender que si estamos en Perú y la hora aeronáutica es 22:30Z, entonces la hora local será 17:30R (R de ROMEO en el alfabeto fonético aeronáutico y diferencia de -05:00 horas)
    (Otra vez Wikipedia/Huso horario militar)

    Tu capacidad de síntesis es espectacular (tres líneas para resumir una tesis , je je je).
      Votes: 1 - Link answer
     
  • Date: 24-06-2017 19:08:50 muy buena todas las explicaciones, uno siempre trabaja de la forma que se adapte cada proyecto.
    actualmente creo yo que hay que usar el standard propuesto por w3 mas que nada porque si uno utiliza o está haciendo una api, practicamente estariamos obligados a hacerlo para evitar conflictos y/o conversiones.
      Votes: 1 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com