Morton 7 de diciembre de 2010 a las 09.51
   Imprimir artículo
elWebmaster.com

PHP: Manejo de variables y clases de fecha y hora en PHP 5


phpwide1Una pequeña gema escondida viaja envuelta en cada nueva instalación de PHP: la extensión Datetime, que contiene la clase DateTime y sus hermanos. Idealmente, todo lo que puedes hacer con las funciones date_* , lo puedes hacer con estas clases.

Fuente original del artículo: Web Builder Zone
Traducción realizada por elWebmaster.com

Aquí hay algunos ejemplos de código en los que veremos como usar DateTime en forma productiva, aunque algunas funciones puede que sólo estén disponibles para PHP 5.3.

  1. <?php
  2.  
  3. class DateTimeTest extends PHPUnit_Framework_TestCase
  4. {
  5.     public function testSupportsAdditionfDays()
  6.     {
  7.         $date = new DateTime('2010-11-26');
  8.         $date->add(new DateInterval('P15D')); // Period of 15 Days
  9.         $this->assertEquals('2010-12-11', $date->format('Y-m-d'));
  10.     }
  11.  
  12.     public function testSupportsSubtractionOfMonths()
  13.     {
  14.         $date = new DateTime('2010-11-26');
  15.         $date->sub(new DateInterval('P20M')); // Period of 15 Days
  16.         $this->assertEquals('2009-03-26', $date->format('Y-m-d'));
  17.     }
  18.    
  19.     public function testSupportsDifferenceOfDates()
  20.     {
  21.         $stopDate = new DateTime('2010-11-26');
  22.         $startDate = new DateTime('2010-10-28');
  23.         $duration = $stopDate->diff($startDate);
  24.         $this->assertEquals('29', $duration->format('%d'));
  25.     }
  26.  
  27.     // never use mktime() again
  28.     public function testSupportsAlsoTimeAndOperatorOverloading()
  29.     {
  30.         $datetime = new DateTime('2010-11-26 12:00');
  31.         $this->assertTrue($datetime > new DateTime('2010-11-26 11:00'));
  32.         $this->assertTrue($datetime == new DateTime('2010-11-26 12:00'));
  33.         $this->assertTrue($datetime < new DateTime('2010-11-26 13:00'));
  34.     }
  35. }
  36. &#91;/php]
  37.  
  38. Como puedes ver en este código, además de <strong>DateTime</strong> hay otras clases como <strong>DateTimeZone </strong>(es decir fecha, hora y zona horaria), <strong>DateInterval </strong>(representa una cantidad determinada de tiempo) y <strong>DatePeriod </strong>(representa dos fechas prefijadas). La combinación de estas clases maneja casi todo escenario de la aplicación <strong>PHP</strong> típica, quien busca una extensión de fecha y hora que funcione y no se interponga con el resto de la lógica de negocio, forzando por ejemplo los desarrolladores a implementar manejo de zonas horarias. <strong>PHP</strong> tiene una maravillosa librería de fecha y hora, que involucra zonas horarias regionales, años bisiestos, y todo lo que puedas imaginar. Y está orientado a objetos: no hay excusa para crear tu propio código de manejo de fechas.
  39.  
  40. ¿Quieres algo aún más impactante? <a href="http://www.doctrine-project.org/">Doctrine 2</a> posee un tipo definido dentro de su componente <em>DBAL</em> que  se asigna a un campo de <strong>DateTime</strong> de un objeto a una fecha <em></em>o una columna de fecha y hora en la base de datos<em></em>. Esto significa que puede crear objetos así:
  41.  
  42. [php]
  43. class User
  44. {
  45.     /**
  46.      * @var DateTime
  47.      * @Column(type="datetime")
  48.      */
  49.     private $lastLogin;
  50.  
  51.     /**
  52.      * You will never have a broken date time string in your domain
  53.      * classes again. The type hinting will take care of that.
  54.      */
  55.     public function setLastLogin(DateTime $lastLogin)
  56.     {
  57.         $this->lastLogin = $lastLogin;
  58.     }
  59.     // ...
  60. }

Y seguir utilizando el ORM sin problemas, incluso si la variable no es una cadena u otro tipo primitivo, que son las variables típicas exigidas por los ORM para simplificar el mapeo.

No es la idea proponer el esparcir un objeto primitivo en todas tus clases de dominio, pero es mejor que un string que almacene un valor complejo como por ejemplo, una fecha (es decir, Date).

Siempre puedes envolver un objeto DateTime, posiblemente con otros campos, cuando sientes que un concepto está faltando:

  1. class BirthDay
  2. {
  3.     /**
  4.      * @var DateTime
  5.     private $date;
  6.  
  7.     /**
  8.      * @var string
  9.      */
  10.     private $personName;
  11.  
  12.     public function howOld(DateTime $currentDate)
  13.     {
  14.         // ...
  15.     }
  16. }

DateTime es un ejemplo de como PHP es un lenguaje que “incluye baterías“, presentando funciones nativamente disponibles en una API orientada a objetos, en lugar de una serie de funciones al estilo de C, pero desconectadas entre sí.

Fuente original del artículo: Web Builder Zone
Traducción realizada por elWebmaster.com


Enviar a Del.icio.us Enviar a Meneame Enviar a Digg Enviar a Fresqui Enviar a Enchilame

Comentarios (2)

  1. Raul dice:

    Excelente información.
    Muchas gracias por compartirla.
    Me gustaria, si fuera posible, que escribieran algo sobre los diferentes IDE’s y Frameworks para trabajar con PHP.
    De nuevo gracias.

  2. links for 2011-01-17 | Tombola! dice:

    […] PHP: Manejo de variables y clases de fecha y hora en PHP 5 – elWebmaster.com (tags: php) […]

Deja tu opinión

© 2007 - 2008 elWebmaster.com | Powered by Wordpress | Diseño CSS y XHTML válido. | Algunos íconos basados en FamFamFam Mini
Acceder