Las fechas en el software son el horror (¡el horror!) sobre todo cuando cambiamos de un entorno a otro.

Voy a empezar este artículo harto de tener que googlear una y otra vez las mismas preguntas. Si alguien aporta algo bienvenido será (salvo que sea para decirme que no tengo n.p.i. :D)

UTC, GMT, TIMESTAMP UNIX ¿¿¿¿¿Pero qué hora es?????

  • UTC (Tiempo Universal Coordinado) = GMT
  • GMT = UTC (ver arriba y entrar en bucle infinito o bien hacer clic en el enlace de la Wikipedia)
  • Tiempo Unix: Los segundos que han pasado desde 1 de Enero de 1970 00:00:00 UTC, sin contar segundos intercalares (haz clic en el enlace para saber más)
  • Tiempo POSIX = Tiempo Unix

¿Cuál es el formato por defecto?

  • MySQL: YYYY-MM-DD hh:mm:ss
  • Oracle: Lo que diga NLS_DATE_FORMAT. Es posible cambiarlo para una sesión con:  ALTER SESSION SET NLS_DATE_FORMAT = ‘YYYY MM DD’;
  • PHP: Sin objetos, se suele trabajar con Tiempo Unix.
    • time() – Timestamp actual
    • string datestring $format [, int $timestamp ] ) – Formatea un timestamp
    • int mktime ([ int $hour = date(«H») [, int $minute = date(«i») [, int $second = date(«s») [, int $month = date(«n») [, int $day = date(«j») [, int $year = date(«Y») [, int $is_dst = -1 ]]]]]]] ) – Devuelve el timestamp de una fecha

Operaciones con fechas

Oracle

  • Comparar dos fechas (teniendo en cuenta la hora): … WHERE fecha BETWEEN fecha1 AND fecha2;
  • Comparar dos fechas (ignorando la hora):
    • … WHERE trunc(fecha, ‘d’) >= trunc(fecha1, ‘d’); — Truncando al día (también se puede hacer al año)
    • … WHERE to_char(fecha, ‘J’) >= to_char(fecham ‘J’) — Usando el calendario Juliano
  • Sumar días:  SELECT fecha + n_dias FROM DUAL;
  • Sumar horas, minutos, etc: SELECT fecha + n_horas / 24 + n_minutos / 1440 FROM DUAL;

Seguiremos informando.