Administración de fechas de calendario y horas

Flash Player 9 y posterior, Adobe AIR 1.0 y posterior

Todas las funciones de administración de fechas de calendario y horas de ActionScript 3.0 se concentran en la clase Date de nivel superior. La clase Date contiene métodos y propiedades que permiten gestionar fechas y horas en la hora universal (UTC) o en la hora local específica de una zona horaria. La hora universal (UTC) es una definición de hora estándar que básicamente coincide con la hora del meridiano de Greenwich (GMT).

Creación de objetos Date

El método constructor de la clase Date es uno de los métodos constructores de clase principal más versátiles. Se puede llamar de cuatro formas distintas.

En primer lugar, si no se proporcionan parámetros, el constructor Date() devuelve un objeto Date que contiene la fecha y hora actuales, en la hora local correspondiente a la zona horaria. A continuación se muestra un ejemplo:

var now:Date = new Date();

En segundo lugar, si se proporciona un solo parámetro numérico, el constructor Date() trata dicho parámetro como el número de milisegundos transcurridos desde el 1 de enero de 1970 y devuelve un objeto Date correspondiente. Hay que tener en cuenta que el valor de milisegundos que se pasa se trata como milisegundos desde el 1 de enero de 1970, en UTC. Sin embargo, el objeto Date muestra los valores en la zona horaria local, a menos que se utilicen métodos específicos de UTC para recuperarlos y mostrarlos. Si se crea un nuevo objeto Date con un solo parámetro de milisegundos, hay tener en cuenta la diferencia de zona horaria entre la hora local y la hora universal UTC. Las siguientes sentencias crean un objeto Date establecido en la medianoche del día 1 de enero de 1970, en UTC:

var millisecondsPerDay:int = 1000 * 60 * 60 * 24; 
// gets a Date one day after the start date of 1/1/1970 
var startTime:Date = new Date(millisecondsPerDay);

En tercer lugar, se pueden pasar varios parámetros numéricos al constructor Date() . Estos parámetros se tratan como el año, mes, día, hora, minuto, segundo y milisegundo, respectivamente, y se devuelve un objeto Date correspondiente. Se supone que estos parámetros de entrada están en hora local y no en UTC. Las siguientes sentencias obtienen un objeto Date establecido en la medianoche del inicio del día 1 de enero de 2000, en hora local:

var millenium:Date = new Date(2000, 0, 1, 0, 0, 0, 0);

En cuarto lugar, se puede pasar un solo parámetro de cadena al constructor Date() . Este intentará analizar dicha cadena en componentes de fecha u hora, y devolver a continuación un objeto Date correspondiente. Si utiliza este enfoque, es una buena idea incluir el constructor Date() en un bloque try..catch para localizar cualquier error de análisis. El constructor Date() acepta una serie de formatos de cadena diferentes (que se incluyen en Referencia de ActionScript 3.0 para la plataforma de Adobe Flash ). La siguiente sentencia inicializa un nuevo objeto Date con un valor de cadena:

var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM");

Si el constructor Date() no puede analizar correctamente el parámetro de cadena, no emitirá una excepción. Sin embargo, el objeto Date resultante contendrá un valor de fecha no válido.

Obtención de valores de unidad de tiempo

Es posible extraer los valores de diversas unidades de tiempo de un objeto Date a través de las propiedades y métodos de la clase Date. Cada una de las siguientes propiedades asigna el valor de una unidad de tiempo en el objeto Date:

  • La propiedad fullYear

  • La propiedad month , que tiene un formato numérico con un valor entre 0 (enero) y 11 (diciembre)

  • La propiedad date , que es el número de calendario del día del mes, en el rango de 1 a 31

  • La propiedad day , que es el día de la semana en formato numérico, siendo 0 el valor correspondiente al domingo

  • La propiedad hours , en el rango de 0 a 23

  • La propiedad minutes

  • La propiedad seconds

  • La propiedad milliseconds

    De hecho, la clase Date proporciona varias formas de obtener cada uno de estos valores. Por ejemplo, se puede obtener el valor de mes de un objeto Date de cuatro formas distintas:

  • La propiedad month

  • El método getMonth()

  • La propiedad monthUTC

  • El método getMonthUTC()

    Los cuatro métodos son igualmente eficaces, de forma que puede elegirse el que mejor convenga a cada aplicación.

    Todas las propiedades anteriormente enumeradas representan componentes del valor de fecha total. Por ejemplo, el valor de la propiedad milliseconds nunca será mayor que 999, ya que cuando llega a 1000, el valor de los segundos aumenta en 1 y el valor de la propiedad milliseconds se restablece en 0.

    Si se desea obtener el valor del objeto Date en milisegundos transcurridos desde el 1 de enero de 1970 (UTC), se puede utilizar el método getTime() . El método opuesto, setTime() , permite cambiar el valor de un objeto Date existente utilizando los milisegundos transcurridos desde el 1 de enero de 1970 (UTC).

Operaciones aritméticas de fecha y hora

La clase Date permite realizar sumas y restas en fechas y horas. Los valores de fecha se almacenan internamente como milisegundos, de forma que es necesario convertir los demás valores a milisegundos para poder realizar sumas o restas en objetos Date.

Si la aplicación va a realizar muchas operaciones aritméticas de fecha y hora, quizás resulte útil crear constantes que conserven valores comunes de unidad de tiempo en milisegundos, como se muestra a continuación:

public static const millisecondsPerMinute:int = 1000 * 60; 
public static const millisecondsPerHour:int = 1000 * 60 * 60; 
public static const millisecondsPerDay:int = 1000 * 60 * 60 * 24;

Ahora resulta sencillo realizar operaciones aritméticas de fecha con unidades de tiempo estándar. El código siguiente establece un valor de fecha de una hora a partir de la hora actual, mediante los métodos getTime() y setTime() :

var oneHourFromNow:Date = new Date(); 
oneHourFromNow.setTime(oneHourFromNow.getTime() + millisecondsPerHour);

Otra forma de establecer un valor de fecha consiste en crear un nuevo objeto Date con un solo parámetro de milisegundos. Por ejemplo, el siguiente código añade 30 días a una fecha para calcular otra:

// sets the invoice date to today's date 
var invoiceDate:Date = new Date(); 
 
// adds 30 days to get the due date 
var dueDate:Date = new Date(invoiceDate.getTime() + (30 * millisecondsPerDay));

A continuación, se multiplica por 30 la constante millisecondsPerDay para representar un tiempo de 30 días y el resultado se añade al valor invoiceDate y se utiliza para establecer el valor dueDate .

Adobe recomienda

2 - 1 = 2 in math operations with dates in ActionScript (2 - 1 = 2 en operaciones matemáticas con fechas en ActionScript, en inglés)

JabbyPanda

Conversión entre zonas horarias

Las operaciones aritméticas de fecha y hora son útiles para convertir fechas de una zona horaria a otra. Esta conversión se realiza a través del método getTimezoneOffset() , que devuelve el valor en minutos de diferencia entre la zona horaria del objeto Date y la hora universal UTC. Devuelve un valor en minutos porque no todas las zonas horarias se establecen mediante incrementos de horas completas, sino que en algunos casos existen diferencias de media hora entre zonas vecinas.

En el siguiente ejemplo se utiliza el desplazamiento de zona horaria para convertir una fecha de la hora local a la hora universal UTC. Para realizar la conversión, primero se calcula el valor de zona horaria en milisegundos y luego se ajusta el valor de Date en dicha cantidad:

// creates a Date in local time 
var nextDay:Date = new Date("Mon May 1 2006 11:30:00 AM"); 
 
// converts the Date to UTC by adding or subtracting the time zone offset 
var offsetMilliseconds:Number = nextDay.getTimezoneOffset() * 60 * 1000; 
nextDay.setTime(nextDay.getTime() + offsetMilliseconds);