Signatur
Beschreibung
Die schreibgeschützte Eigenschaft timestamp eines GeolocationPosition-Objekts gibt an, wann die Position ermittelt wurde. Der Wert ist ein EpochTimeStamp, also die Anzahl der Millisekunden seit dem 1. Januar 1970 00:00:00 UTC. Er lässt sich direkt an new Date() übergeben.
Wichtig ist timestamp vor allem dann, wenn Positionen aus dem Cache kommen können. Mit der Option maximumAge von getCurrentPosition() bzw. watchPosition() darf der Browser eine ältere, zwischengespeicherte Position liefern. Über timestamp erkennen Sie, wie alt diese Position tatsächlich ist.
Typische Anwendungen:
- veraltete Messwerte verwerfen, z. B. alles, was älter als 30 Sekunden ist,
- Geschwindigkeit aus zwei aufeinanderfolgenden Positionen berechnen (Strecke geteilt durch Zeitdifferenz),
- Standortverläufe (Tracks) mit korrekter Uhrzeit speichern oder an einen Server senden.
Rückgabewert
new Date(position.timestamp) erhalten Sie ein Date-Objekt.Beispiele
Erfassungszeitpunkt lesbar ausgeben
navigator.geolocation.getCurrentPosition(
(position) => {
const zeit = new Date(position.timestamp);
console.log(`Position erfasst um: ${zeit.toLocaleTimeString('de-DE')}`);
console.log(`Breite: ${position.coords.latitude}, Länge: ${position.coords.longitude}`);
},
(error) => console.error(`Fehler ${error.code}: ${error.message}`)
);
Zwischengespeicherte Position auf Alter prüfen
const MAX_ALTER_MS = 30_000; // 30 Sekunden
const getPosition = (options) =>
new Promise((resolve, reject) =>
navigator.geolocation.getCurrentPosition(resolve, reject, options)
);
const ermittleAktuellePosition = async () => {
// Cache-Werte bis 5 Minuten erlauben, um Akku zu sparen
const position = await getPosition({ maximumAge: 300_000 });
const alter = Date.now() - position.timestamp;
if (alter > MAX_ALTER_MS) {
console.log(`Position ist ${Math.round(alter / 1000)} s alt – frische Messung wird angefordert`);
return getPosition({ maximumAge: 0, enableHighAccuracy: true });
}
return position;
};
ermittleAktuellePosition()
.then((pos) => console.log('Verwendete Position von', new Date(pos.timestamp).toISOString()))
.catch((err) => console.error(err.message));
Geschwindigkeit aus zwei Positionen berechnen
const haversine = (a, b) => {
const R = 6371000; // Erdradius in Metern
const rad = (g) => (g * Math.PI) / 180;
const dLat = rad(b.latitude - a.latitude);
const dLon = rad(b.longitude - a.longitude);
const h = Math.sin(dLat / 2) ** 2 +
Math.cos(rad(a.latitude)) * Math.cos(rad(b.latitude)) * Math.sin(dLon / 2) ** 2;
return 2 * R * Math.asin(Math.sqrt(h));
};
let letzte = null;
const watchId = navigator.geolocation.watchPosition((pos) => {
if (letzte) {
const sekunden = (pos.timestamp - letzte.timestamp) / 1000;
if (sekunden > 0) {
const meter = haversine(letzte.coords, pos.coords);
console.log(`≈ ${(meter / sekunden * 3.6).toFixed(1)} km/h`);
}
}
letzte = pos;
}, console.error, { enableHighAccuracy: true });
// Später beenden:
// navigator.geolocation.clearWatch(watchId);
// Wichtig · Fallstricke
- Kein
Date-Objekt: Die Eigenschaft liefert eine Zahl (Millisekunden). Frühere Spezifikationen nannten den TypDOMTimeStamp; ältere Implementierungen konnten abweichen. Wandeln Sie den Wert zur Sicherheit mitnew Date(position.timestamp)um. - Zwischengespeicherte Werte: Bei
maximumAge > 0kanntimestampdeutlich in der Vergangenheit liegen. Verlassen Sie sich nicht darauf, dass eine gelieferte Position „jetzt“ gemessen wurde. - Uhrzeit des Geräts: Der Wert hängt von der Systemuhr ab. Eine falsch gestellte Uhr kann negative Zeitdifferenzen oder Zeitpunkte in der Zukunft ergeben. Prüfen Sie Differenzen deshalb auf
> 0, bevor Sie teilen. - Nicht monoton: Im Gegensatz zu
performance.now()kann die Epochenzeit springen, etwa durch eine NTP-Synchronisation. - Kompatibilität: Wird von allen modernen Browsern unterstützt. Die Geolocation-API steht aber nur in sicheren Kontexten (HTTPS) zur Verfügung und braucht die Zustimmung der Nutzerin oder des Nutzers.
- Datenschutz: Zeitstempel zusammen mit Koordinaten ergeben ein Bewegungsprofil. Speichern oder übertragen Sie solche Daten nur mit Einwilligung und so sparsam wie möglich.