Cómo utilizar JDate

From Joomla! Documentation

This page is a translated version of the page How to use JDate and the translation is 100% complete.

Other languages:
English • ‎español • ‎français • ‎Nederlands • ‎русский

Introducción

JDate es una clase auxiliar, se extiende de la clase DateTime de PHP, permite a los desarrolladores manejar el formato de fechas de forma más eficiente. La clase permite a los desarrolladores dar formato legibles a cadenas fechas, interacción MySQL, cálculo timestamp de UNIX y también proporciona métodos auxiliares para trabajar con diferentes zonas horarias.

El Uso de JDate

Crear una instancia de JDate

Todos los métodos auxiliares de fecha requieren una instancia de la clase JDate. Para empezar, debes crear una. Un objeto JDate puede ser creado de dos maneras. Uno es el típico método nativo de simplemente crear una nueva instancia:

$date = new JDate(); // Creates a new JDate object equal to the current time.

También puedes crear una instancia mediante el método estático definido en JDate:

$date = JDate::getInstance(); // Alias of 'new JDate();'

No hay ninguna diferencia entre estos métodos, ya que JDate::getInstance simplemente crea una nueva instancia de JDate exactamente igual que el primer método que se muestra.

Alternativamente, también puedes recuperar la fecha actual (como un objeto JDate) de JApplication, mediante:

$date = JFactory::getDate();

Argumentos

El constructor JDate (y el método estático getInstance) acepta dos parámetros opcionales: Una cadena de fecha a formato y una zona horaria. No pasar una cadena de fecha creará un objeto JDate con la fecha y la hora actual, mientras que no pasar una zona horaria permitirá al objeto JDate utilizar la zona horaria predeterminada.

El primer argumento, si se utiliza, debe ser una cadena que pueda ser analizada usando el constructor nativo de php, DateTime. E. g:

$currentTime = new JDate('now'); // Current date and time
$tomorrowTime = new JDate('now +1 day'); // Current date and time, + 1 day.
$Plus1MonthTime = new JDate('now +1 month'); // Current date and time, + 1 month.
$Plus1YearTime = new JDate('now +1 year'); // Current date and time, + 1 year.
$Plus1YearAnd1MonthTime = new JDate('now +1 year +1 month'); // Current date and time, + 1 year and 1 month.
$PlusTimeToTime = new JDate('now +1 hour +30 minutes +3 seconds'); // Current date and time, + 1 hour, 30 minutes and 3 seconds
$PlusTimeToTime = new JDate('now -1 hour +30 minutes +3 seconds'); // Current date and time, + 1 hour, 30 minutes and 3 seconds
$CombinedTimeToTime = new JDate('now -1 hour -30 minutes 23 seconds'); // Current date and time, - 1 hour, +30 minutes and +23 seconds

$date = new JDate('2012-12-1 15:20:00'); // 3:20 PM, December 1st, 2012

Ejemplos

Ejemplo provisional de formatos de fecha

JFactory::getDate() obtiene un objeto JDate y después ejecutamos la función toFormat de JDate.

JFactory::getDate()->toFormat('%a %d %b %Y - %H:%M')

En la API del Joomla! CMS 3.3 la función "toFormat" fue cambiada a "format", por lo que el ejemplo anterior será:

JFactory::getDate()->format('%a %d %b %Y - %H:%M')

Funciónn: toISO8601(boolean $local = false) : cadena

$date = new JDate('2016-01-01 02:00:00'); // A.M. time, in GMT timezone

Establecemos el parámetro de la función como "false" y después como "true" (la zona horaria del usuario está establecida como "America/New_York"), obteniendo:

$timezone = new DateTimeZone( JFactory::getUser()->getParam('timezone') );
$date->setTimezone($timezone);
echo $date->toISO8601(false); // 2016-01-01 T 02:00:00 +00:00
echo $date->toISO8601(true); // 2015-12-31 T 21:00:00-05:00 (local time in New York)