Gestione di date e orari

Flash Player 9 e versioni successive, Adobe AIR 1.0 e versioni successive

Tutte le funzioni relative alla gestione di date di calendario e orari di ActionScript 3.0 sono concentrate nella classe Date di livello principale. La classe Date contiene metodi e proprietà che consentono di gestire date e orari sia nell'ora universale (UTC) che nell'ora locale specifica di un determinato fuso orario. UTC è una definizione di ora standard che corrisponde all'ora di Greenwich o GMT (Greenwich Mean Time).

Creazione di oggetti Date

La classe Date vanta uno dei metodi delle funzioni di costruzione più versatile di tutte le classi principali. È possibile chiamarlo in quattro diversi modi.

In primo luogo, se non vengono forniti parametri, la funzione di costruzione Date() restituisce un oggetto Date contenente la data e l'ora corrente, nell'ora locale basata sul fuso orario in cui vi trovate. Di seguito viene fornito un esempio:

var now:Date = new Date();

Secondo, se viene fornito un solo parametro numerico, la funzione di costruzione Date() lo interpreta come il numero di millesimi di secondo dal 1 gennaio 1970 e restituisce un oggetto Date corrispondente. Notate che il valore in millesimi di secondo trasmesso viene interpretato come il numero di millisecondi dal 1 gennaio 1970, in UTC. Tuttavia, l'oggetto Date mostra i valori nel fuso orario locale, a meno che non si utilizzino metodi specifici di UTC per recuperarli e visualizzarli. Se create un nuovo oggetto Date utilizzando un singolo parametro in millesimi di secondo, accertarsi di calcolare la differenza di fuso orario tra l'ora locale e UTC. Le istruzioni seguenti consentono di creare un oggetto Date impostato sulla mezzanotte del 1 gennaio 1970, in 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);

Terzo, è possibile trasmettere più parametri numerici alla funzione di costruzione Date() . Tali parametri vengono trattati rispettivamente come anno, mese, giorno, ora, minuto, secondo e millesimo di secondo e viene restituito un oggetto Date corrispondente. I seguenti parametri di input sono espressi in ora locale anziché in UTC. Le istruzioni seguenti consentono di creare un oggetto Date impostato sulla mezzanotte del 1 gennaio 2000, in UTC:

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

Infine, è possibile trasmettere un'unica stringa di parametri alla funzione di costruzione Date() . La funzione tenterà di analizzare la stringa in componenti di data o ora, quindi di restituire un oggetto Date corrispondente. Se scegliete questo approccio, è opportuno includere la funzione di costruzione Date() in un blocco try..catch per registrare eventuali errori di analisi. La funzione di costruzione Date() accetta diversi formati stringa (elencati nella Guida di riferimento di Adobe ActionScript 3.0 per la piattaforma Adobe Flash . L'istruzione seguente consente di inizializzare un nuovo oggetto Date mediante un valore di stringa:

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

Se la funzione di costruzione Date() non è in grado di analizzare il parametro di stringa, non verrà generata alcuna eccezione. Tuttavia, l'oggetto Date risultante conterrà un valore data non valido.

Determinazione dei valori di unità di tempo

È possibile estrarre i valori di varie unità di tempo da un oggetto Date mediante proprietà e metodi della classe Date. Ognuna delle seguenti proprietà consente di ottenere il valore di un'unità di tempo nell'oggetto Date:

  • Proprietà fullYear

  • Proprietà month , espressa in formato numerico (da 0 per gennaio a 11 per dicembre)

  • Proprietà date , corrispondente al numero di calendario del giorno del mese, nell'intervallo da 1 a 31

  • Proprietà day , giorno della settimana in formato numerico (0 per domenica)

  • Proprietà hours , da 0 a 23

  • Proprietà minutes

  • Proprietà seconds

  • Proprietà milliseconds

    La classe Date offre vari metodi per determinare ciascuno di questi valori. Per ottenere il valore mese di un oggetto Date, ad esempio, sono disponibili quattro diversi modi:

  • Proprietà month

  • Metodo getMonth()

  • Proprietà monthUTC

  • Metodo getMonthUTC()

    Tutte e quattro le modalità si equivalgono in termini di efficacia, quindi è possibile scegliere il proprio metodo preferito in base ai requisiti dell'applicazione.

    Le proprietà elencate rappresentano tutte componenti del valore data globale. La proprietà dei millesimi di secondo, ad esempio, non sarà mai superiore a 999, poiché, quando raggiunge il valore 1000, la proprietà secondi aumenta di 1 e la proprietà millesimi di secondo riparte dal valore 0.

    Per ottenere il valore dell'oggetto Date in termini di millesimi di secondo dal 1 gennaio 1970 (UTC), è possibile utilizzare il metodo getTime() . La sua controparte, il metodo setTime() , consente di modificare il valore di un oggetto Date esistente utilizzando i millesimi di secondo dal 1 gennaio 1970 (UTC).

Operazioni aritmetiche con data e ora

La classe Date consente di eseguire addizioni e sottrazioni con i valori di data e ora. I valori di data sono memorizzati internamente in millesimi di secondo, di conseguenza, prima di aggiungere o sottrarre un valore da oggetti Date è necessario convertirlo in millesimi di secondo.

Se l'applicazione deve eseguire molte operazioni aritmetiche con date e orari, potrebbe essere utile creare costanti per conservare i valori di unità di tempo maggiormente utilizzati in millesimi di secondo, come nell'esempio seguente:

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

Grazie alle unità di tempo standard, sarà più semplice eseguire operazioni aritmetiche con le date. Il codice seguente consente di impostare un valore di data su un'ora a partire dall'ora corrente mediante i metodi getTime() e setTime() :

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

Un altro modo per impostare un valore di data è creare un nuovo oggetto Date utilizzando un unico parametro di millesimi di secondo. Il codice seguente consente, ad esempio, di aggiungere 30 giorni a una data per calcolarne un'altra:

// 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));

Successivamente, la costante millisecondsPerDay viene moltiplicata per 30 per rappresentare l'intervallo di 30 giorni e il risultato viene sommato al valore invoiceDate utilizzato per impostare il valore dueDate .

Conversione di fusi orari

Le operazioni aritmetiche con data e ora risultano utili per convertire date da un fuso orario a un altro. Così funziona il metodo getTimezoneOffset() , che restituisce il valore in minuti corrispondente allo scarto del fuso orario dell'oggetto Date rispetto a UTC. Viene restituito un valore in minuti perché non tutti i fusi orari sono impostati in incrementi orari equivalenti; alcuni infatti presentano differenze di mezz'ora rispetto ai fusi orari adiacenti.

Nell'esempio seguente viene utilizzata la differenza di fuso orario per convertire una data dall'ora locale all'ora UTC. La conversione viene effettuata mediante il calcolo del valore del fuso orario in millesimi di secondo, quindi effettuando una regolazione del valore Date con tale valore:

// 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);