Date-Objekt
För att hantera tidsangivelser i skriptspråket används objekt av typen Date. Internt lagrar Date-objektet tidpunkter som ett antal millisekunder sedan midnatt i början av den 1 januari 1970. För att få ut användbar information som t.ex. vilket årtal ett visst antal millisekunder motsvarar, finns ett antal operationer man kan utföra på Date-objekt.
Midnatt i början av den 1 januari 1970 kallas för epoken (eng. the epoch), eller ibland Unix-epoken eftersom Unix-operativsystem använder denna tidpunkt som utgångspunkt för tidsangivelser. Inom kronologi är en epok en tidpunkt som valts som startpunkt för en viss tidsskala. Händelser som inträffade vid en tidigare tidpunkt kan anges genom att räkna med negativa tal.
Datalagret i Ethiris innehåller ingen datatyp som direkt lagrar tidpunkter. Det bästa sättet att lagra en tidpunkt i datalagret är att använda en Double-variabel som innehåller antalet millisekunder sedan epoken. Om du vill utföra operationer på tidpunkten, skapar du ett Date-objekt utifrån Double-variabeln, gör önskade förändringar, och sparar sedan tillbaka Date-objektet till variabeln.
Exempel:
var date = new Date(StartTime);
date.setYear(2010);
StartTime = date;
I exemplet förutsätter vi att variabeln StartTime innehåller en tidpunkt och vi vill justera årtalet I denna tidpunkt till 2010 utan att ändra något annat i tidpunkten.
Egenskaper i Date-objektet
Date-objekt har inga särskilda egenskaper.
Date-konstruktorn
new Date()
För att skapa ett nytt Date-objekt skriver du
var myDate = new Date();
Det är lämpligt att spara undan det nya Date-objektet någonstans, i det här fallet i variabeln myDate. Det nya objektet kommer att innehålla dagens datum och nuvarande tidpunkt.
När du använder Date-konstruktorn för att skapa ett nytt Date-objekt och inte skickar några parametrar till konstruktorn, så skapas ett Date-objekt som innehåller dagens datum och nuvarande tidpunkt.
new Date(value)
För att skapa ett nytt Date-objekt som representerar ett visst antal millisekunder efter epoken anropar du konstruktorn med en parameter som inte är en sträng.
var anotherDate = new Date(1234151251211);
Om parametern är en sträng komer tiden att läsas från den. Strängen måste vara i något av följande format:
ISO-standard – ”YYYY-MM-DD HH:mm:ss.zzz”
ISO 8601-1:2019 – ”YYYY-MM-DDTHH:mm:ssZ”
Compact format – ”YYYYMMDDHHmmsszzz”
Amerikansk standard - ” [Day] Mon DD YYYY HH:mm:ss.zzz”
Där [Day] ignoreras och kan uteslutas, den beskriver namet på veckdagen med tre bokstäver, t.ex. ”Wed”. Mon är namnet på månaden med tre bokstäver t.ex. ”Oct”. YYYY är årtalet med fyra siffror, MM är månadens nummer med två siffror, DD är datumet I månaden med två siffror, HH, mm och ss är timmar, minuter resp. sekunder med två siffror och slutligen zzz är millisekunder med tre siffror.
var someDate = new Date("2006-10-11 13:21:39.168");
The Date constructor which takes a string is compatible with the function Date.prototype.toString(). This means that Date objects can be converted into strings and back again without losing any information.
new Date(year, month[, date[, hours[, minutes[, seconds[, ms]]]]])
Du kan även ange minst två parametrar till Date-konstruktorn för att skapa ett Date-objekt som representerar en viss tidpunkt. De parametrar du utelämnar får värdet 0.
Följande skript skapar ett Date-objekt som innehåller tidpunkten för julafton 1963. Det visar sig vara en tisdag.
var christmas1963 = new Date(1963, 12, 24);
Debug.Print(christmas1963);
Date()
Om Date-konstruktorn anropas som en funktion, returneras en sträng som innehåller dagens datum. Alla parametrar ignoreras.
Observera
Glöm alltså inte att skriva new Date(…) om du avser att skapa ett nytt Date-objekt. Om du utelämnar new kommer alltid en sträng innehållande dagens datum att skapas, oavsett vilka parametrar du skickar in.
Date.parse(string)
Funktionen Date.parse() omvandlar sitt argument till en sträng och försöker tolka strängen som en tidsangivelse i lokal tid i något av följande format:
ISO-standard – ”YYYY-MM-DD HH:mm:ss.zzz”
Compakt format – ”YYYYMMDDHHmmsszzz”
Amerikansk standard - ” [Day] Mon DD YYYY HH:mm:ss.zzz”
Där [Day] ignoreras och kan uteslutas, den beskriver namet på veckdagen med tre bokstäver, t.ex. ”Wed”. Mon är namnet på månaden med tre bokstäver t.ex. ”Oct”. YYYY är årtalet med fyra siffror, MM är månadens nummer med två siffror, DD är datumet i månaden med två siffror, HH, mm och ss är timmar, minuter resp. sekunder med två siffror och slutligen zzz är millisekunder med tre siffror.
Funktionen returnerar sedan ett tal som innehåler den tidpunkten uttryckt som ett antal millisekunder sedan epoken.
Date.parseUTC(string)
Funktionen Date.parse() omvandlar sitt argument till en sträng och försöker tolka strängen som en tidsangivelse i UTC tid i något av följande format:
ISO-standard – ”YYYY-MM-DD HH:mm:ss.zzz”
Compakt format – ”YYYYMMDDHHmmsszzz”
Amerikansk standard - ” [Day] Mon DD YYYY HH:mm:ss.zzz”
Där [Day] ignoreras och kan uteslutas, den beskriver namet på veckdagen med tre bokstäver, t.ex. ”Wed”. Mon är namnet på månaden med tre bokstäver t.ex. ”Oct”. YYYY är årtalet med fyra siffror, MM är månadens nummer med två siffror, DD är datumet i månaden med två siffror, HH, mm och ss är timmar, minuter resp. sekunder med två siffror och slutligen zzz är millisekunder med tre siffror.
Funktionen returnerar sedan ett tal som innehåler den tidpunkten uttryckt som ett antal millisekunder sedan epoken.
Date-prototypen
Date.prototype.toString([format[, timezone]])
Datum-objekt kan enkelt omvandlas till strängar. Följande anrop omvandlar myDate till en sträng och visar den i debug fönstret.
Debug.Print (myDate.toString());
Du kan förse toString() med en eller två valbara parametrar för att åstadkomma resultatet du söker. Den första valbara parametern format specificerar formatet på resultatsträngen:
Om format är ”compact” blir resultatet en sträng i kompakt format: ”YYYYMMDDHHmmsszzz”.
Om format är ”long” blir resultatet en sträng i amerikanskt standardformat: ”Day Mon DD YYYY HH:mm:ss.zzz”.
Om format har något annat värde, inklusive inget värde, blir resultatet en sträng i ISO format: ”YYYY-MM-DD HH:mm:ss.zzz”.
Date-konstruktorn som tar en sträng är kompatibel med funktionen Date.prototype.toString(). Detta innebär att Date-objekt kan omvandlas till och från strängar utan förlust av information.
Den andra valbara parametern timezone specificerar vilket tidsformat som ska användas vid konvertering, om värdet “utc” är angivet används standarden “Coordinated Universal Time”, alla andra värden, inklusive utelämning av värdet, resulterar i lokal tid.
Date.prototype.toDateString()
Returnerar datum-delen av Date-objektet som en sträng. Anropet
myDate.toDateString()
skulle returnera en sträng liknande “Mon Jul 22 2024”
Date.prototype.toTimeString()
Returnerar tid-delen av Date-objektet som en sträng.
myDate.toTimeString()
skulle returnera en sträng liknande “13:21:39.168”
Date.prototype.toUTCString()
Returnerar en sträng från Date-objektet i UTC tid. Generar samma värde som toString() gör utan parametrar.
Date.prototype.toLocaleDateString()
Returnerar en sträng från Date-objektet som innehåller datumdelen. Systemets regionsformat används.
myDate.toLocaleDateString()
skulle returnera en sträng liknande “2024-07-22”
Date.prototype.toLocaleString()
Returnerar en sträng från Date-objektet. Systemets plats används.
Date.prototype.toLocaleTimeString()
Returnerar en sträng från Date-objektet som innehåller tidsdelen. Systemets regionsformat används.
Date.prototype.getTimezoneOffset()
Returnerar skillnaden mellan lokal tid och UTC tid.
Exempel:
Om din tidszon är GMT+1 kommer -60 att returneras om vintertid gäller, eller -120 om sommartid gäller.
Date.prototype.valueOf()
Följande anrop omvandlar myDate till ett tal, nämligen antal millisekunder sedan epoken, och visar det i debug fönstret:
Debug.Print (myDate.valueOf());
Number-konstruktorn omvandlar sin parameter till ett tal när den anropas som en funktion. Följande skript är alltså ekvivalent med det föregående:
Debug.Print (Number(myDate));
Date.prototype.getTime()
Ett annat sätt att konvertera ett Date-objekt till ett nummer är att använda funktionen getTime().
myDate.getTime()
skulle returnera något liknande: 1160573057929.
Date.prototype.getYear(), Date.prototype.getMonth(), Date.prototype.getDay(), Date.prototype.getDayOfWeek(), Date.prototype.getHours(), Date.prototype.getMinutes(), Date.prototype.getSeconds(), Date.prototype.getMilliseconds(), Date.prototype.getUTCYear(), Date.prototype.getUTCMonth(), Date.prototype.getUTCDay(), Date.prototype.getUTCDayOfWeek(), Date.prototype.getUTCHours(), Date.prototype.getUTCMinutes(), Date.prototype.getUTCSeconds(), Date.prototype.getUTCMilliseconds()
Date-objekt har ett antal funktioner tillgängliga vars namn alla börjar på ”get”. Dessa används för att bryta ned Date-objektet i mindre tidsenheter.
Följande skript visar information om Date-objektet i debug fönstret:
// Skapa en sträng som innehåller informations om
// Date-objektet
var s = "Local date:\n";
s += "Year: " + myDate.getYear() + "\n";
s += "Month: " + myDate.getMonth() + "\n";
s += "Day: " + myDate.getDay() + "\n";
s += "Hours: " + myDate.getHours() + "\n";
s += "Minutes: " + myDate.getMinutes() + "\n";
s += "Seconds: " + myDate.getSeconds() + "\n";
s += "Milliseconds: " + myDate.getMilliseconds()+ "\n\n";
s += "UTC date:\n";
s += "Year: " + myDate.getUTCYear() + "\n";
s += "Month: " + myDate.getUTCMonth() + "\n";
s += "Day: " + myDate.getUTCDay() + "\n";
s += "Hours: " + myDate.getUTCHours() + "\n";
s += "Minutes: " + myDate.getUTCMinutes() + "\n";
s += "Seconds: " + myDate.getUTCSeconds() + "\n";
s += "Milliseconds: " + myDate.getUTCMilliseconds();
// Visa strängen i debug fönstret
Debug.Print(s);
Date.prototype.setTime()
Det går även att förändra vilket tidsvärde ett Date-objekt lagrar. Du kan välja att sätta tidpunkten som ett antal millisekunder sedan epoken genom att anropa setTime().
Följande exempel visar vilken tidpunkt som ligger 1 000 000 000 millisekunder efter epoken.
myDate.setTime(1e9);
Debug.Print(myDate);
1×109 skrivs i skriptspråket som 1e9. En miljard millisekunder efter epoken visar sig vara måndagen den 12 januari 1970 klockan 13:46:40.
Date.prototype.setYear(), Date.prototype.setMonth(), Date.prototype.setDay(), Date.prototype.setHours(), Date.prototype.setMinutes(), Date.prototype.setSeconds(), Date.prototype.setMilliseconds(), Date.prototype.setUTCYear(), Date.prototype.setUTCMonth(), Date.prototype.setUTCHours(), Date.prototype.setUTCMinutes(), Date.prototype.setUTCSeconds(), Date.prototype.setUTCMilliseconds()
Date-objekt har ett antal funktioner tillgängliga vars namn alla börjar på ”set”. Dessa används för att ändra någon del av Date-objektet.
Exampel:
// sätter året till 2010 och månaden till December
myDate.setYear(2010);
myDate.setMonth(12);
// det samma kan göras i UTC
myDate.setUTCYear(2010);
myDate.setUTCMonth(12);