jueves, 13 de septiembre de 2012

PHP 5.2 y operaciones de fecha

Recientemente me encontraba desarrollando una aplicación web para PHP y configuré mi ambiente de desarrollo con un WAMP, que contenía una versión de PHP superior a la 5.3.  Encantado comencé a utilizar operaciones y funciones de su orientación a objetos, pero al pasar a ambiente de producción, me doy cuenta de que utilizaba una versión anterior de PHP ¡que no soporta funciones de objeto DateTime!

Especificamente, sumar y restar fechas, DateTime::add y DateTime:sub, ni sus equivalentes en procedural date_add() y date_sub.

Esto implicó una recodificación (aunque no tan larga) y la creación de funciones que permitiran hacer las operaciones con una facilidad parecida a la de las funciones no soportadas.

Para resolver el problema, en una librería general codifiqué funciones para agregar las fechas, sean positivas o negativas, eliminando la necesidad de tener un date_add y un date_sub. Una función por cada intervalo que necesitaba, como lo maneja C#.

A continuación expongo un ejemplo de la función para agregar días.


    /**
    *
    * Agrega dias a una fecha
    * @param datetime $date
    * @param int $days
    * @return DateTime
    */
    function add_days($date, $days)
    {
      // Inicializamos el símbolo, como "más" ( + )
      $symbol = '+';
     
      //    Si días es menor a 0, es decir, negativo
      if ( $days < 0 )
      {
            //    Configuramos el símbolo como "menos" ( - )
            $symbol = '-';
      }
     
      //    Hacemos la operación y la guardamos en result
      //    Convirtiendo a UNIXTIME mediante strtotime
      //    el intervalo y la fecha
      $result = strtotime (
            '+' . $days . ' day' ,
            strtotime (
                  date_format($date, 'Y-m-d')
            )
      );
     
      //    Regresamos una fecha, a partir del resultado
      //    transformado a formato Y-m-d
      return date_create( date( 'Y-m-d', $result ) );

    } // end function add_days
 
Siguiendo este ejemplo, podemos codificar las funciones para semanas, meses, años, etc.

No hay comentarios:

Publicar un comentario