Datums- und Uhrzeitberechnungen

Das Date-Objekt und die dazugehörigen Methoden werden verwendet, um allgemeine Kalender- und Uhrzeitaufgaben auszuführen, z. B. das Bearbeiten und Vergleichen von Datumsangaben und das Berechnen von verstrichener Zeit.

Festlegen eines Datums auf das aktuelle Datum

Wenn Sie für das Date-Objekt eine Instanz erstellen, enthält diese einen Wert, der einen bestimmten Zeitpunkt darstellt (auf eine Millisekunde genau). Sie können diesen Datums- und Uhrzeitwert dann lesen oder ändern.

Das folgende Beispiel zeigt, wie Sie das aktuelle Datum abrufen und im Format "mm/dd/yy" anzeigen.

// Create a date object. Because no arguments are
// passed, the date object contains the current date and
// time (to the millisecond).
var dt : Date = new Date();

// Determine and display the month, day, and year.
// The getMonth method uses a zero offset for
// the month number.
var month : Number = dt.getMonth()+1;
var day : Number = dt.getDate();
var year : Number = dt.getFullYear();

print (month + "/" + day + "/" + year);

Festlegen eines bestimmten Datums

Im folgenden Beispiel wird ein bestimmtes Datum an den Konstruktor übergeben.

// Create a date object for a specific date.
var dt : Date = new Date('8/24/2009');

JScript ist in Bezug auf das Datumsformat recht flexibel. Es sind beispielsweise auch Varianten wie "8-24-2009", "August 24, 2009" und "24 Aug 2009" zulässig.

Sie können eine Zeit auch angeben, wie dies in den folgenden Beispielen gezeigt ist.

// Create a date object for a specific date and time.
// The time format is hours:minutes:seconds.
var dtA : Date = new Date('8/24/2009 14:52:10');

// Create a date object for the same date and time as in
// the previous example.
// The parameters are:
// year, month, day, hours, minutes, seconds.
// August is month 7 because January is month 0.
var dtB : Date = new Date(2009, 7, 24, 14, 52, 10);

Addieren und Subtrahieren von Tagen

In einem vorherigen Beispiel werden die Methoden getMonth, getDate und getFullYear verwendet, um Teile des Datums abzurufen. Eine gleichwertige Gruppe festgelegter Methoden ermöglicht es Ihnen, den Wert im Date-Objekt zu ändern.

Im folgenden Beispiel wird gezeigt, wie Sie ein Datum auf das Datum des vorherigen Tags festlegen können. Darin wird das Datum des aktuellen Tags und der Tag des Monats abgerufen und anschließend die setDate-Methode verwendet, um den Tag auf den vorherigen Tag festzulegen.

// Get the current day's date and day of month.
var myDate : Date = new Date();
var dayOfMonth : Number = myDate.getDate();

// Reset myDate to one day earlier.
myDate.setDate(dayOfMonth - 1);

JScript inkrementiert je nach Bedarf zum nächsten Monat oder Jahr. Wenn das aktuelle Datum z. B. der 28. Januar ist und Sie 7 Tage hinzufügen, wird das Datum korrekt auf den 4. Februar festgelegt. Im folgenden Beispiel wird dem aktuellen Datum eine Woche hinzugefügt. Außerdem wird im Beispiel die Zeit aus der Datumsangabe gelöscht.

var myDate : Date = new Date();
myDate.setDate(myDate.getDate() + 7);

// Clear the time.
myDate.setHours(0, 0, 0, 0);

Arbeiten mit Monaten und Jahren

Das folgende Beispiel enthält eine Schleife, die Datumsangaben ausgibt und einen Monat nach dem aktuellen Datum beginnt. Die Monate werden korrekt in das nächste Jahr inkrementiert.

var currentDate : Date = new Date();

for(var index : int = 1; index <= 12; index++)
{
    var myDate : Date = new Date();
    myDate.setMonth(currentDate.getMonth() + index);

    print ("Month+" + index + ": " + myDate);
}

Im folgenden Beispiel wird das Datum abgerufen, das ein Jahr vor dem aktuellen Datum liegt.

var myDate : Date = new Date();
myDate.setFullYear (myDate.getFullYear() - 1);

Im folgenden Beispiel wird der erste Tag des Monats abgerufen, der auf den aktuellen Monat folgt. Der Monat wird inkrementiert, und anschließend wird der Tag auf den ersten Tag des Monats festgelegt.

function GetFirstOfNextMonth() : Date
{
    var myDate : Date = new Date();
    myDate.setMonth(myDate.getMonth() + 1);
    myDate.setDate(1);

    return myDate;
}

Im folgenden Beispiel wird der letzte Tag des aktuellen Monats ermittelt. Dazu wird der erste Tag des Folgemonats bestimmt und dann ein Tag subtrahiert.

// Determine the last day of the current month.
// The GetFirstOfNextMonth() function is in the previous example.
var myDate : Date = GetFirstOfNextMonth();
myDate.setDate (myDate.getDate() - 1);

Arbeiten mit Tagen der Woche

Die getDay-Methode (nicht zu verwechseln mit getDate) gibt einen Wert zwischen 0 und 6 zurück, um den Tag der Woche anzugeben. 0 (null) steht für Sonntag, 1 für Montag usw. Im folgenden Beispiel wird gezeigt, wie Sie den aktuellen Tag der Woche bestimmen.

var arDays : Array = ["Sunday", "Monday", "Tuesday",
    "Wednesday", "Thursday", "Friday", "Saturday"];

var today : Date = new Date();
var dayNum : Number = today.getDay();
var dayOfWeek : String = arDays[dayNum];

Im folgenden Beispiel wird das Datum des letzten Freitags vor dem aktuellen Datum zurückgegeben.

function getPreviousDayOfWeek(dayOfWeekNum : Number) : Date
{
    var dt : Date = new Date();
    if (dt.getDay() == dayOfWeekNum)
    {
        // It is currently the day of the week specified in
        // the function call. Subtract one week.
        dt.setDate(dt.getDate() - 7);
    }
    else
    {
        // Go back a day at a time until arriving
        // at the specified day of week.
        while (dt.getDay() != dayOfWeekNum)
        {
            dt.setDate(dt.getDate() - 1);
        }
    }

    return dt;
}

var friday : Number = 5;
var myDate : Date = getPreviousDayOfWeek(friday);

Im folgenden Beispiel wird das Datum des US-Feiertags "Thanksgiving" ermittelt, der am vierten Donnerstag im November begangen wird. Im Skript wird nach dem 1. November des aktuellen Jahrs gesucht, dann nach dem ersten Donnerstag, und zuletzt werden drei Wochen hinzugefügt.

// Determine the current date and clear the time.
var myDate : Date = new Date();
myDate.setHours(0, 0, 0, 0);

// Determine November 1 of the current year.
var november : Number = 10;
myDate.setMonth(november);
myDate.setDate(1);

// Find Thursday.
var thursday : Number = 4;
while(myDate.getDay() != thursday)
{
    myDate.setDate(myDate.getDate() + 1) ;
}

// Add 3 weeks.
myDate.setDate(myDate.getDate() + 21);

Berechnen der verstrichenen Zeit

Die getTime-Methode gibt die Anzahl an Millisekunden zurück, die seit dem Anfangsdatum und der Anfangsuhrzeit, also 0 Uhr am 1. Januar 1970, vergangen sind. Für ein Datum, das vor diesem Datum liegt, gibt getTime eine negative Zahl zurück.

Mithilfe von getTime können Sie eine Start- und Endzeit zum Berechnen eines verstrichenen Zeitraums festlegen. Sie können die Methode zum Messen von kleinen Einheiten, z. B. einige Sekunden, und zum Messen größerer Einheiten, z. B. Tage, verwenden.

Bestimmen der verstrichenen Zeit in Sekunden

In diesem Beispiel wird die verstrichene Zeit in Sekunden berechnet. Dies funktioniert unabhängig davon, wie lang der Zeitraum ist. Die von der getTime-Methode gemeldeten Millisekunden sind ein absoluter Wert ab dem Anfangsdatum (Nulldatum). Der Wert ändert sich bei jeder Änderung der Minuten, Stunden und Tage.

Console.Write("What is your name? ");

var startTime : Date = new Date();
var name : String = Console.ReadLine();
var endTime : Date = new Date();

var elapsed : Number = 
    (endTime.getTime() - startTime.getTime()) / 1000; 

Console.WriteLine("You took " + elapsed +
    " seconds to type your name.");

Bestimmen von verstrichener Zeit in Tagen

Um mit besser überschaubaren Einheiten arbeiten zu können, können Sie die von der getTime-Methode zurückgegebenen Millisekunden auch durch einen passenden Wert teilen. Wenn Sie Millisekunden beispielsweise in Tage umwandeln möchten, teilen Sie die Zahl durch 86.400.000 (1000 x 60 x 60 x 24).

Das folgende Beispiel zeigt, wie viel Zeit seit dem ersten Tag des laufenden Jahrs verstrichen ist. Es wird eine Folge von Divisionsoperationen verwendet, um die verstrichene Zeit in Tagen, Stunden, Minuten und Sekunden zu berechnen. Dabei wird die Sommerzeit nicht berücksichtigt.

// Set the unit values in milliseconds.
var msecPerMinute : Number = 1000 * 60;
var msecPerHour : Number = msecPerMinute * 60;
var msecPerDay : Number = msecPerHour * 24;

// Determine the current date and time.
var today : Date = new Date();

// Determine January 1, at midnight, of the current year.
var january : Number = 0;
var startOfYear : Date = new Date();
startOfYear.setMonth(january);
startOfYear.setDate(1);
startOfYear.setHours(0, 0, 0, 0);

// Determine the difference in milliseconds.
var interval : Number = today.getTime() - startOfYear.getTime();

// Calculate how many days the interval contains. Subtract that
// many days from the interval to determine the remainder.
var days : Number = Math.floor(interval / msecPerDay );
interval = interval - (days * msecPerDay );

// Calculate the hours, minutes, and seconds.
var hours : Number = Math.floor(interval / msecPerHour );
interval = interval - (hours * msecPerHour );

var minutes : Number = Math.floor(interval / msecPerMinute );
interval = interval - (minutes * msecPerMinute );

var seconds : Number = Math.floor(interval / 1000 );

// Display the result.
var msg : String = days + " days, " + hours + " hours, "
 + minutes + " minutes, " + seconds + " seconds.";

print(msg);

Bestimmen des Alters von Benutzern

Im folgenden Beispiel wird das Alter des Benutzers in Jahren bestimmt. Das Geburtsjahr wird vom laufenden Jahr subtrahiert, und dann wird zusätzlich 1 subtrahiert, falls der Geburtstag im laufenden Jahr noch nicht eingetreten ist. Es werden keine verstrichenen Millisekunden verwendet, weil die Altersangabe eines Menschen nicht als festes Zeitintervall definiert ist.

var birthday : Date = new Date("8/1/1985");
var today : Date = new Date();
var years : Number = today.getFullYear() - birthday.getFullYear();

// Reset birthday to the current year.
birthday.setFullYear(today.getFullYear());

// If the user's birthday has not occurred yet this year, subtract 1.
if (today < birthday)
{
    years--;
}
print("You are " + years + " years old.");

Tipp

Beim Vergleichen von Datumsangaben müssen Sie sicherstellen, dass Sie ordnungsgemäß vorgehen. Weitere Informationen finden Sie im nächsten Abschnitt dieses Themas.

Im folgenden Beispiel wird eine Methode verwendet, mit der das Alter des Benutzers in Monaten berechnet wird. Das Skript enthält einen Test, mit dem ermittelt wird, ob der Geburtstag des Benutzers im laufenden Monat bereits eingetreten ist.

var birthday : Date = new Date("8/1/1985");
var today : Date = new Date();
var years : Number = today.getFullYear() - birthday.getFullYear();

// Determine the number of months.
var months : Number = (years * 12) +
    (today.getMonth() - birthday.getMonth());

// Adjust the months if the birthday has not occurred
// yet in the current month.
if (today.getDate() < birthday.getDate())
{
    months--;
}
print("You are " + months + " months old.");

Vergleichen von Datumsangaben

Wenn Sie in JScript Objekte mithilfe von "Größer als" oder "Kleiner als" (<, >, < = oder > =) vergleichen, werden die Werte der Objekte ausgewertet, bevor der Vergleich durchgeführt wird. Übereinstimmungsvergleiche funktionieren anders. Wenn Sie den ==-Operator verwenden, gibt der Vergleich nur dann true zurück, wenn beide Seiten des Operators auf das gleiche Objekt verweisen. Der !=-Operator geht auf ähnliche Weise vor.

Die getTime-Methode gibt die Anzahl von Millisekunden zurück, die zwischen dem 1. Januar 1970, Mitternacht, und dem im Date-Objekt enthaltenen Uhrzeitwert verstrichen sind. Auf diese Weise können Sie die Millisekundendarstellungen von zwei Datumsangaben vergleichen.

Ein auf Millisekunden basierender Datumsvergleich funktioniert jedoch nicht ordnungsgemäß, wenn eines der Date-Objekte eine andere Uhrzeit als Mitternacht enthält.

Wenn Sie ein Date-Objekt erstellen, ohne ein Konstruktorargument einzubinden, wird dem Datum die aktuelle Uhrzeit zugeordnet. Wenn Sie ein Date-Objekt für ein bestimmtes Datum erstellen, ist die dem Datum Mitternacht zugeordnet, also der Beginn des Tags.

Im folgenden Beispiel wird überprüft, ob das aktuelle Datum mit dem angegebenen Datum übereinstimmt. Um das aktuelle Datum in todayAtMidn festzulegen, erstellt das Skript ein Date-Objekt für das aktuelle Jahr, den Monat und den Tag.

// Determine the current date and time, and then
// determine the current date at midnight.
var now : Date = new Date(); 
var todayAtMidn : Date =
    new Date(now.getFullYear(), now.getMonth(), now.getDate());

// Set specificDate to a specified date at midnight.
var specificDate : Date = new Date("9/21/2009");

// Compare the two dates by comparing the millisecond
// representations.
if (todayAtMidn.getTime() == specificDate.getTime())
{
    print("Same");
}
else
{
    print("Different");
}

Siehe auch

Konzepte

Datentypzusammenfassung