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.
class DateTimeTest extends PHPUnit_Framework_TestCase
{
public function testSupportsAdditionfDays()
{
$date = new DateTime('2010-11-26');
$date->add(new DateInterval('P15D')); // Period of 15 Days
$this->assertEquals('2010-12-11', $date->format('Y-m-d'));
}
public function testSupportsSubtractionOfMonths()
{
$date = new DateTime('2010-11-26');
$date->sub(new DateInterval('P20M')); // Period of 15 Days
$this->assertEquals('2009-03-26', $date->format('Y-m-d'));
}
public function testSupportsDifferenceOfDates()
{
$stopDate = new DateTime('2010-11-26');
$startDate = new DateTime('2010-10-28');
$duration = $stopDate->diff($startDate);
$this->assertEquals('29', $duration->format('%d'));
}
// never use mktime() again
public function testSupportsAlsoTimeAndOperatorOverloading()
{
$datetime = new DateTime('2010-11-26 12:00');
$this->assertTrue($datetime> new DateTime('2010-11-26 11:00'));
$this->assertTrue($datetime == new DateTime('2010-11-26 12:00'));
$this->assertTrue($datetime}
}
Como puedes ver en este código, además de DateTime hay otras clases como DateTimeZone (es decir fecha, hora y zona horaria), DateInterval (representa una cantidad determinada de tiempo) y DatePeriod (representa dos fechas prefijadas). La combinación de estas clases maneja casi todo escenario de la aplicación PHP 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. PHP 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.
¿Quieres algo aún más impactante? Doctrine 2 posee un tipo definido dentro de su componente DBAL que se asigna a un campo de DateTime de un objeto a una fecha o una columna de fecha y hora en la base de datos. Esto significa que puede crear objetos así:
class User
{
/**
* @var DateTime
* @Column(type="datetime")
*/
private $lastLogin;
/**
* You will never have a broken date time string in your domain
* classes again. The type hinting will take care of that.
*/
public function setLastLogin(DateTime $lastLogin)
{
$this->lastLogin = $lastLogin;
}
// ...
}
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:
class BirthDay
{
/**
* @var DateTime
private $date;
/**
* @var string
*/
private $personName;
public function howOld(DateTime $currentDate)
{
// ...
}
}
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
0 comentarios to "PHP: Manejo de variables y clases de fecha y hora en PHP 5"
Publicar un comentario