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


Una 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.

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 en la entrada

Blog Archivo

Subscribete via E-Mail

Subscribete via RSS!

Ingresa tu email para:
Recibe actualizaciones del Blog.

Etiquetas

16-bit 2.0 2012 256 colores 2d 3 404 5 8 acelerar Acer Aspire ActionScript ADD-ONS addon adobe adobe air Adsense aerogarden agilidad airbender AJAX alarma alien all your base alta definición Android angulacion answers API APIs aplicacion aplicaciones Apple apps archive Argentina ask atajo atajos de teclado ataque audio avance avatar aventura grafica back background backtweets balsamiq mockups banda bang banners barcelona barra lateral bases de datos Batacazo bateria bbcode bear bebé Biblioteca Virtual big bing BitDefender BitTorrent blekko Blog blogger bloggers blogósfera Blogs bocetos bollywood bordes botánica brickify brush buenos aires buscador búsqueda avanzada cache caja calendario calidad cámara web canciones Canvas carrusel catástrofe ceguera de banners celular CEO charla chpimunk chrome chrome web store chromium chuck norris cine Cisco cita cliente ftp cloud cluster Cms cocina codec código coleccion color colorotate columna comercio commodore 64 compatibilidad Competencia compositio Comscore comunicacion Comunidad comunidad online Conferencia configuración consejos contenido content copia correo correo electrónico cotidiano cpanel Creatividad criminal cross-browser cse CSS CSS3 cubo cuenta cuentos cultivo Curiosidades curso photoshop Cursos daisies date Debian degradé dell desaparecer desarrollo web descarga Descargas descomprimir desfragmentar despertador despertar deviantart DHTML Digg diseñador Diseño Diseño Grafico Diseño Gráfico diseño web Disney dispositivo dispositivos moviles dispositivos táctiles div dominio dramatic dropbox duck go e-book e-commerce e-commerce day e-mail EBE ecología editor educación a distancia educativo Educativos Niños efecto efectos ejemplo emblema emprendimiento emulador emuladores encabezados encuesta enlace episodios error escritura España estadística Estados Unidos estilo estudio etica evento Eventos Excel exportar extensión extensiones extraterrestre Facebook facebook connect garage fc64 feeds Fiberparty film Filosofía Firebug firefinder Firefox firmware fixes Flash flex 4 Flickr fondo fondos font font dragr form formularios foto Fotografía Framework freelance fuente fuentes future FXG g1 gadget gadgets games gaming gazelle geek gestion gestor de contenido gestos gestuales gesture ghajini gm730 Gmail Google google analytics google app Google Calendar Google Chrome Google Docs gradient gradiente gradientes gráfico gran torino gratis groupon guerra guia h.264 habla hack Hackers handle handler hardware herramientas gráficas hitchcock hollywood homepage horizontal hover HP html HTML válido HTML5 HTTP hub huerta IBM icono IE illustrator imagen Imagenes imágenes importar impress inclinacion indio infecciones info-box infografías iniciador Inkscape inspiracion interactivo interfaz Internet Internet Explorer interno invasión investigación iPhone iphone os iPod island istick IT iTunes U jackson JavaScript jerarquía jetpack jQuery jQuery TOOLS jsc64 juego Juegos lanzamiento laptop lego lenguaje Lenovo Lg libre librería libro limpieza Links Linux literatura lógica logo logos logotipo lolcat Lotería love luca lucasarts luces luminoso luz Mac mac book pro mac os x MacBook macro mago Malware manejo mantenimiento manual mapa mapeo maquetación marciano Marketing mascara mascota McBook medicion medio ambiente meme memoria mente menú metafilter metropolis michael microsoft Mobile Learning mockup monkey moonwalker mootools moousture motivacional motor de busqueda motores de búsqueda mouse mouseprobe mov movil mozilla Mozilla Firefox Mozilla Labs mp3 MS Office mujer maravilla multimedia MultiTouch música MXML MySpace MySql N97 napkee navegación Navegador navegadores networking New York nightly nihilogic no ser encontrado nodos Nokia notebook noticias Novedades ochentoso oferta offers oficial online Open Source Open SUSE OpenOffice opera operativo oportunidad optimización orden organizacion orgullo os oscurecer oscuridad oso Outlook oz page speed PageRank pagespeed pageviews panaderia Panda paneles pantalla pantallas táctiles parasitos PDF peekfeed película pencil peoplebrowsr perfil pestaña photoshop photoshop clase 2 PHP php 5 Picasa picker pinceles pingie piratas pirates plagio plantación plantar plantilla plastic logic Plugin plugins pocket yoga podcasts port portal portátil posicionamiento powerpoint ppc prejuicio preparacion presentación Productividad Programación programas promocion protofish prototype proyecto prueba PSD Psicología public Publicidad puerto QEMU quickoffice quicktime quote rafael jimenez rank Recursos Red red social reddit Redes sociales reloj remake reproductor reseña resolución respaldo resultado retro robo rojo RSS rubik Ruby rust Safari Salud sans-serif sclipo script sculpting sdk seleccionador SEO serie serif SERP server servidor servidor web set shadow share sherlock shortcodes shuffle sidebar sidepost simple simpson Sin clasificar sistema sistema operativo sistemas operativos sitios web slideshow smart smooth SMS snow leopard social sociedad Software Software educativo software libre sombra sonido soundmanager2 spam spreadsheet SQL Squeeze startup steps left store streaming subdominio success suckerfish sun microsystems tablas table tabs tactil Taller de Fotografía Digital Taller de Photoshop taller photoshop Talleres Tarjetas de Crédito teaser tecnica Tecnologia teddy telefono television telltale template templates textbox the theme Themes theora thumbnails tienda time tipografía tipografias tips titulares to touchscreen tower defense trailer transform transition tres Troyano Troyanos truco Trucos tutorial photoshop tutoriales TV tweet tweetstats Twitter unplugged Usabilidad USB usuarios Utilidades para PC Utilidades para tu web variables vector vegetales velocidad venta Ventas verde verdura version video videojuego videojuegos videos Videos de Música Peruana viernes Viernes Unplugged VirtualBox Virus Visas VMware voucher w3c wallpaper wallpapers web Web 2.0 web participativa webcam WebKit webm webmaker Wi-Fi widescreen Wikipedia Windows Windows 7 Windows Mobile wiz wizard wolfram wonder woman Word Wordpress WorldBuilder wwdc 09 XHTML yahoo Youtube yui zip