Kalenderdatums en -tijden beheren

Flash Player 9 of hoger, Adobe AIR 1.0 of hoger

In ActionScript 3.0 bevinden alle functies voor het beheren van kalenderdatums en -tijden zich in de klasse Date op hoofdniveau. De klasse Date bevat methoden en eigenschappen waarmee datums en tijden in UTC (Coordinated Universal Time) of in de lokale tijd kunnen worden verwerkt. UTC is net als GMT (Greenwich Mean Time) een standaarddefinitie voor tijd.

Date-objecten maken

De klasse Date bevat een van de meest veelzijdige constructormethoden van alle kernklassen. U kunt deze op vier manieren aanroepen:

Eerste methode: als er geen parameters zijn opgegeven, retourneert de constructor Date() een object Date met de huidige datum en tijd voor uw tijdzone. Hier volgt een voorbeeld:

var now:Date = new Date();

Tweede methode: als er een numerieke parameter is opgegeven, wordt deze waarde door de constructor Date() beschouwd als het aantal milliseconden sinds 1 januari 1970 en wordt er een overeenkomend object Date geretourneerd. De waarde die u doorgeeft, wordt beschouwd als het aantal milliseconden sinds 1 januari 1970, in UTC. In het object Date worden waarden echter in uw lokale tijdzone weergegeven, tenzij u de UTC-specifieke methoden gebruikt om ze op te halen en weer te geven. Als u een nieuw object Date maakt met één parameter voor milliseconden, moet u rekening met het tijdverschil tussen uw lokale tijd en UTC. Met de volgende instructies wordt een object Date op middernacht op 1 januari 1970 (UTC) ingesteld:

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

Derde methode: u kunt meerdere numerieke parameters doorgeven aan de constructor Date() . Deze parameters worden respectievelijk als het jaar, de maand, de dag, het uur, de minuut, de seconde en de milliseconde beschouwd en er wordt een overeenkomend object Date geretourneerd. De waarden in deze invoerparameters worden beschouwd als waarden in de lokale tijd, niet in UTC. Met de volgende instructies wordt een object Date op middernacht op 1 januari 2000 (lokale tijd) ingesteld:

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

Vierde methode: u kunt een parameter van één tekenreeks doorgeven aan de constructor Date() . Vervolgens wordt geprobeerd die tekenreeks te parseren in datum- of tijdcomponenten en wordt er een overeenkomend object Date geretourneerd. Als u deze methode gebruikt, kunt u de constructor Date() het beste insluiten in een blok try..catch om eventuele fouten bij het parseren op te vangen. De constructor Date() accepteert een aantal verschillende tekenreeksindelingen (deze staan vermeld in de Naslaggids voor ActionScript 3.0 voor het Adobe Flash-platform ). Met de volgende instructie wordt een nieuw object Date geïnitialiseerd met een tekenreekswaarde:

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

Als de constructor Date() de tekenreeksparameter niet kan parseren, treedt er geen uitzondering op. Het resulterende object Date bevat in dat geval echter wel een ongeldige datumwaarde.

Waarden voor tijdeenheden ophalen

U kunt de waarden voor verschillende tijdeenheden in een object Date extraheren met eigenschappen of methoden van de klasse Date. Elk van de volgende eigenschappen geeft u de waarde van een tijdeenheid in het object Date:

  • De eigenschap fullYear

  • De eigenschap month , waarvoor een numerieke notatie wordt gebruikt waarbij 0 voor januari staat en 11 voor december

  • De eigenschap date , waarvoor het kalendergetal van de dag van de maand, een waarde tussen 1 en 31, wordt gebruikt

  • De eigenschap day , waarvoor een numerieke notatie wordt gebruikt waarbij 0 voor zondag staat

  • De eigenschap hours , een waarde tussen 0 en 23

  • De eigenschap minutes

  • De eigenschap seconds

  • De eigenschap milliseconds

    U kunt elk van deze waarden op een aantal verschillende manieren ophalen. U kunt de maandwaarde van een object Date bijvoorbeeld op vier verschillende manieren ophalen:

  • De eigenschap month

  • De methode getMonth()

  • De eigenschap monthUTC

  • De methode getMonthUTC()

    Aangezien de vier methoden even efficiënt zijn, kunt u de benadering kiezen die het beste bij uw toepassing past.

    De bovenstaande eigenschappen vertegenwoordigen componenten van de totale datumwaarde. De eigenschap milliseconds kan bijvoorbeeld nooit een hogere waarde dan 999 hebben, omdat bij een waarde van 1000 de waarde bij seconds met 1 wordt verhoogd en de eigenschap milliseconds weer wordt ingesteld op 0.

    Als u de waarde van het object Date voor het aantal milliseconden sinds 1 januari 1970 (UTC) wilt ophalen, kunt u de methode getTime() gebruiken. Met diens tegenhanger, de methode setTime() , kunt u de waarde van een bestaand object Date wijzigen op basis van het aantal milliseconden sinds 1 januari 1970 (UTC).

Wiskundige bewerkingen op datums en tijden uitvoeren

U kunt optel- en aftrekbewerkingen uitvoeren op datums en tijden in de klasse Date. Omdat datumwaarden intern in milliseconden worden opgeslagen, moet u andere waarden in milliseconden omzetten voordat u deze optelt bij of aftrekt van Date-objecten.

Als in uw toepassing een groot aantal wiskundige bewerkingen wordt uitgevoerd op datums en tijden, is het misschien nuttig om constanten te maken waarin veelgebruikte tijdwaarden in milliseconden worden opgeslagen, zoals hieronder:

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

Nu is het eenvoudig om wiskundige bewerkingen op datums uit te voeren met standaardtijdeenheden. Met de volgende code wordt een datumwaarde op één uur vanaf de huidige tijd ingesteld met de methoden getTime() en setTime() :

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

U kunt ook een datumwaarde instellen door een nieuw object Date te maken met één parameter voor milliseconden. Met de volgende code worden bijvoorbeeld 30 dagen bij een andere datum opgeteld om een nieuwe datum te berekenen:

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

Vervolgens wordt de constante millisecondsPerDay met 30 vermenigvuldigd om de periode van dertig dagen te berekenen. Het resultaat wordt opgeteld bij de waarde voor invoiceDate en wordt gebruikt om de waarde voor dueDate in te stellen.

Werken met tijdzones

U kunt wiskundige bewerkingen op datums en tijden uitvoeren wanneer u datums wilt omzetten in een andere tijdzone. Ditzelfde doet de methode getTimezoneOffset() , waarmee in minuten wordt aangegeven hoeveel de tijdzone van het object Date afwijkt van UTC. Er wordt een waarde in minuten geretourneerd, omdat het verschil tussen tijdzones niet altijd een uur is. In sommige gevallen is het verschil met de volgende tijdzone een half uur.

In het volgende voorbeeld wordt het verschil in tijdzones gebruikt om een datum van de lokale tijd om te zetten in UTC. Eerst wordt de tijdzonewaarde in milliseconden berekend en vervolgens wordt de Date-waarde aangepast met die hoeveelheid:

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