Timestamp in Javascript

UNIX-Zeitstempel für Datum und Zeit

Ein Zeitstempel (Timestamp) enthält Informationen über Datum und Zeit in einer einzigen Variablen.
Diese Darstellung hat IT-intern große Bedeutung, wird jedoch nicht für menschliche AnwenderInnen verwendet.
UNIX-Timestamps zählen die
Sekunden seit 1970-01-01 00:00:00
Javascript verwendet als Variante Millisekunden (ms) statt (s).
Datum & Zeit Datum und Zeit in Javascript
IT-Datum Datum und Zeit in der Informatik
Timestamp Variable für Datum und Zeit
Live-Timestamp PC-Lokalzeit, Server-Zeit und Differenz
Timestamp lesen Timestamp mit Javascript lesen
Timestamp schreiben Timestamp mit Javascript schreiben
Date.UTC() Liefert einen Timestamp aus UTC-Komponenten
Rechnen Timestamps zum Rechnen mit Datum und Zeit
Live-Test Timestamp Live codieren und decodieren

Live-Timestamp

Die Darstellung von Datum und Zeit nach dem Standard ISO-8601 ist für Menschen optimiert. Insbesondere wird sie weltweit eindeutig interpretiert. Sehen sie in der Tabelle ISO-Texte (Strings) und zum Vergleich die entsprechenden Timestamps. Die Darstellung von Datum und Zeit in einer einzigen ganzzahligen Variablen ist für die Informatik optimiert. Der Timestamp lässt sich rasch und speicher-sparsam verwalten, und damit kann besonders rasch und einfach gerechnet werden (Differenzen).
Datum & Zeit ISO-8601 UNIX-Timestamp
sec / UTC
LokalzeitUTC
Ihr PC 2000-01-01 00:00:00 2000-01-01 00:00:00 1234567890
Webserver 2000-01-01 00:00:00 2000-01-01 00:00:00 1234567890
Zeit-Differenz δ = 00:00:00   δ = 0
Die UNIX-Variante ist nicht die einzige Möglichkeit, Timestamps darzustellen: Nachfolgend einige andere Beispiele. Vergleichen sie Typ (Geschwindigkeit!), Speicherbedarf, Genauigkeit (Auflösung), Grenzen
VariableTyp Bit  EinheitMinimumMaximum
TimestampInteger* Sekunde1970-01-01*
JavascriptInteger 43 Millisekunde1970-01-01275760-09-13
FileMakerInteger37 Sekunde1582-10-144000-12-31
Y1900Double22 Tag0001-01-0132767-12-31
JD Double* Tag-4712-01-01*
MJD Integer17 Tag1886-04-042132-08-31
Integer
Neuere Systeme verwenden ausnahmslos Integer-(Ganzzahl)-Typen. Das erlaubt weit höhere Rechengeschwindigkeit, erfordert jedoch die Verwendung kleiner Zeit-Einheiten:
In der Praxis werden Sekunden oder Millisekunden verwendet.
Double
Ältere Systeme verwenden Double-(Gleitkomma)-Typen. Das ist langsam, jedoch je nach Anzahl der verwendeten Bits beliebig genau. Zusätzlich zum Datum wird Speicherplatz für die Zeit benötigt: Sekunden 17 Bit, Millisekunden 27 Bit, usw.
Als Einheit wird 1 Tag verwendet. Dann entspricht der ganzzahlige Teil dem Datum, der Nachkomma-Teil der Uhrzeit.
Obergrenze
Es ist damit zu rechnen, dass zukünftige Betriebssysteme und Software 'breitere' Variable verwenden, d.h. mehr Bit zum Rechnen und Speichern zur Verfügung stehen. Bei 64 Bit werden die Grenzen für Zeitstempel praktisch aufgehoben: Damit lässt sich ein Zeitraum von ca. 580 Millionen Jahren auf Millisekunden genau darstellen.

Die Untergrenzen aller Systeme könnten problemlos aufgehoben werden, wenn auch negative Zahlen zur internen Verwendung zugelassen werden. Das würde nur 1 weiteres Bit und eine kleine Ergänzung des Kalender-Algorithmus kosten.
Für den eigenen Gebrauch können sie problemlos auch mit negativen Datum-Variablen rechnen.
Auflösung ("Genauigkeit"):
Die Uhren heute üblicher PC können nur auf Sekunden genau eingestellt werden. Deshalb genügen Sekunden für absolute Zeit-Angaben, z.B. Erstellung oder Änderung von Dokumenten.
In manchen Bereichen werden genauere Zeiten benötigt. Dort spielt jedoch meist das Datum keine Rolle. Hier wird kein Timestamp verwendet, sondern z.B. Sekunden als Double-Zahl.
Beispiel: Der Aufbau dieser Webseite auf ihrem PC benötigte 0 ms.
Nur in ganz wenigen technischen und wissenschaftlichen Bereichen (z.B. Astronomie, GPS) wird hohe Genauigkeit über lange Zeiträume benötigt, das erfordert tatsächlich Zeitmarken hoher Auflösung.
Timestamp (verschiedene Systeme unterschiedlicher Speicherbreite) benötigt bis heute ca. 31 Bit, bis zum Jahr 10000 ca. 38 Bit.
Timestamps werden immer in Weltzeit (UTC) angegeben.
Javascript arbeitet mit Millisekunden-Timestamps.
Für eigene Rechnungen können sie problemlos auch negative Zahlenwerte verwenden und damit die Untergrenze auf alle historischen Daten erweitern.

JD (keine Speicherform, sondern ein Standard-Algorithmus) benötigt für das Datum bis heute ca. 22 Bit, bis zum Jahr 10000 ca. 23 Bit. Dazu kommen für die Zeit (Sekunden) weitere 16 Bit. Die Obergrenze richtet sich nach den verfügbaren Speicher-Bits.
JD ist derzeit das einzige System, in welchem sich alle bekannten und sinnvollen Datum-Werte darstellen lassen. Es wird daher u.a. in der Astronomie verwendet.
Filemaker arbeitet zwar mit den Jahren 1 bis 4000, verschenkt jedoch ganze 1582 Jahre durch einen Fehler im Kalender. Der korrekt anwendbare Bereich umfasst 1583 bis 4000.

Y1900 hat als Double-Variable theoretisch einen Anzeige-Bereich größer als das Alter des Universums.
Gängige Programme setzen leider wesentlich engere Grenzen:
OpenOffice arbeitet korrekt mit den Jahren 1 bis 32767, M$-Software nur von 1900 bis 9999. Durch einen notorischen Fehler im Kalender arbeiten M$-Programme überhaupt erst ab 1900-03-01 korrekt.

Mit MJD (ebenfalls ein Standard-Algorithmus) wird normalerweise nur das Datum als ganze Zahl dargestellt, dazu genügen 5 Dezimalziffern.
Details zu den Themen Datum und Zeit, SQL-Timestamp

Lokalzeit und Weltzeit UTC

Javascript Datum-Objekte und UNIX-Timmestamps werden in Weltzeit UTC geführt (früher Greenwich Mean Time GMT). Sie sind damit unabhängig von lokalen Zeitzonen (time zones) oder Sommerzeit (daylight savings).

Der Timestamp 0 liefert daher das UTC-Datum 1970-01-01 00:00:00, jedoch in Mitteleuropa die lokale Zeit 01:00:00, in Moskau 02:00:00 usw.
Javascript bietet zum Lesen bzw. Schreiben von Datum-Objekten je einen kompletten Satz von Funktionen für Lokalzeit (getFullYear . . getSeconds) und für UTC (getUTCFullYear . . getUTCSeconds).
Die Funktionen für Lokalzeit berücksichtigen die lokale Zeitzone und die Sommerzeit.
Funktion getTimezoneOffset liefert die die momentane Differenz ihrer PC-Lokalzeit zur UTC (timezone offset) in Minuten. Sie ist nicht nur vom Ort, sondern seit Einführung der Sommerzeit (daylight savings) leider auch vom Datum abhängig !   Live:
new.Date().getTimezoneOffset = 0

Timestamp mit Javascript lesen

Die Funktion getTime() liefert den Timestamp eines Date-Objekts in Millisekunden.
Das Beispiel berechnet daraus den aktuellen UNIX-Timestamp in Sekunden (Systemzeit ihres PC).
Timestamps werden immer in Weltzeit (UTC) angegeben, sind daher unabhängig von Zeitzone und Sommerzeit und weltweit eindeutig und vergleichbar.
dt = new Date();
jts_now = dt.getTime();
uts_now = Math.round(jts_now/1000);
Live--Javascript (Systemzeit ihres PC):
uts_now = 1234567890

Timestamp mit Javascript schreiben

Die Funktion setTime() setzt ein Date-Objekt auf einen Timestamp in Millisekunden.
Einen bestimmten Timestamp (z.B. heute Mittag) erhält man so: Date-Objekt auf den gewünschten Zeitpunkt setzen, Timestamp lesen (Kasten oberhalb).
Dieses Beispiel setzt das Date-Objekt dt_mittag auf heute Mittag 12:00:00 Lokalzeit.
uts_mittag = 1234567890;
dt_mittag.setTime(uts_mittag * 1000);
PC-Systemuhr:
Mit den set-Funktionen (setFullYear .. setSeconds) können sie nur die Daten von Javascript-Date-Objekten setzen, nicht die Systemuhr ihres PC. Solche Zugriffe sind für (seriöse) Browser aus Sicherheitsgründen untersagt. Kontrollieren sie in den Einstellungen, ob ihr Browser Programm-Zugriffe (z.B. ActiveX) erlaubt.

Zur Synchronisation der PC-Systemuhr mit einem genauen Zeit-Server verwenden sie am besten NTP (Network Time Protocol)-Programme. Falls das nicht möglich ist (Firewall), dann bietet z.B. Perl elegante Möglichkeiten, die genaue Zeit von beliebigen Webservern zu beziehen.

Die Funktion Date.UTC()

Die Funktion liefert aus den einzelnen UTC-(Weltzeit)-Bestandteilen (Jahr, Monat, Tag, Stunden, Minuten, Sekunden) einen Timestamp.
Bestandteile: Jahr, Monat, Tag, Stunde, Minute, Sekunde.
Javascript zählt das Monat als Zahl 0..11 !

Das Javascript Datum-Objekt new Date erwartet Argumente in Lokalzeit. Die Funktion getTime liefert davon einen Timestamp (in Millisekunden), allerdings in Weltzeit UTC !

Die Funktion Date.UTC erwartet Argumente in UTC und liefert ebenfalls einen Timestamp in UTC.

Rechts Live-Beispiele für beide alternativen Methoden. Durch Verarbeitungs-Zeit und Rundungsfehler können die Werte um 1 sec abweichen.
Test:
Lokalzeit = 2000-01-01 00:00:00
UTC       = 2000-01-01 00:00:00
dt1 = new Date(2000,0,1,0,0,0);
uts1 = dt1.getTime()/1000;
uts2 = Date.UTC(2000,0,1,0,0,0);
uts2/=1000;
Live--Javascript Test
uts1 = 1234567890
uts2 = 1234567890

Beachten sie die unterschiedlichen Argumente für die beiden Funktionen !

Rechnen mit Timestamps

Zeitstempel ermöglichen das Rechnen mit Datum und Zeit: Da es sich IT-intern um gewöhnliche Zahlen handelt, kann problemlos addiert und subtrahiert werden.

Die Umwandlung von Datum & Zeit in die jeweilige Zeitmarke (und umgekehrt) erfordert einen Kalender. Javascript verfügt dazu über einen internen Kalender,

Der Kalender muss die unterschiedliche Anzahl von Tagen pro Monat und die Schaltjahre berücksichtigen. Falls ein Timestamp-System vor das Datum 1582-10-14 zurückreicht, muss auch die 'Gregorianische Kalender-Reform' berücksichtigt werden.

'Genaue' Systeme müssten theoretisch auch die Schaltsekunden berücksichtigen, die zum Jahreswechsel unregelmäßig eingeschoben werden. Das wird in derzeit üblichen Systemen nicht durchgeführt, daher ist bereits die Berechnung von Sekunden-Differenzen über einige Jahre hinweg fehlerhaft !

Jedes Betriebssystem enthält einen Kalender. Viele Programme (z.B. OpenOffice) verwenden jedoch eigene Kalender (z.B. um Fehler wie jenen aller bisherigen M$-Systeme vor 1900-03-01 zu vermeiden).
Live--Javascript:
Berechnung der Zeit für den Aufbau dieser Webseite
jts_start = new Date().getTime();
// ... Javascript-Stoppuhr
jts_stop = new Date().getTime();
dif_ms = jts_stop - jts_start;
dif_ms = 0 Millisekunden

Berechnung der Sekunden bis heute Mittag 12:00:00
jts_now = new Date().getTime();
uts_now = Math.round(jts_now/1000);
uts_mittag = 1234567890;
dif_s = (uts_mittag - uts_now);
dif_s = 0 Sekunden

Berechnung der Tage bis Sylvester 2000-12-31
uts = new Date().getTime();
sylvester = 1234567890;
dif_d = (sylvester-uts)/(60*60*24);
dif_d = 0 Tage

Timestamps Live codieren und decodieren

Weltzeit UTC
Jahr
Monat
Tag
Stunden
Minuten
Sekunden
PC-Lokalzeit = 2000-01-01 00:00:00

UNIX-Timestamp (Sekunden)

Timestamp
 
δ(s)
 x
Neue Version
Geben sie beliebige gültige Daten ein. Nach Eingabe wird die jeweils andere Seite des Formulars neu berechnet.
Klicken sie für die aktuellen Daten ihres PC.
Mit δ(s) kann der Timestamp um fixe Beträge geändert werden, z.B. Minuten, Stunden oder Tage.

Letzte Änderung dieser Seite: 2011-12-01 08:40:39