Start · Sprachen · JavaScript · Referenz · GeolocationPosition.timestamp

GeolocationPosition.timestamp

Eigenschaft

Schreibgeschützter Zeitstempel in Millisekunden seit der Unix-Epoche, der angibt, wann das Gerät die Position erfasst hat.

seit JavaScript Baseline: alle Browser (nur in sicherem Kontext / Kategorie: webapi

Signatur

GeolocationPosition.timestamp

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

Typ
number (EpochTimeStamp)
Beschreibung
Millisekunden seit der Unix-Epoche (UTC) zum Zeitpunkt der Positionserfassung. Mit 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}`)
);
Position erfasst um: 14:32:07 Breite: 52.52, Länge: 13.405

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));
Position ist 142 s alt – frische Messung wird angefordert Verwendete Position von 2024-05-14T12:32:07.512Z

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);
≈ 4.8 km/h ≈ 5.1 km/h

// Wichtig · Fallstricke

  • Kein Date-Objekt: Die Eigenschaft liefert eine Zahl (Millisekunden). Frühere Spezifikationen nannten den Typ DOMTimeStamp; ältere Implementierungen konnten abweichen. Wandeln Sie den Wert zur Sicherheit mit new Date(position.timestamp) um.
  • Zwischengespeicherte Werte: Bei maximumAge > 0 kann timestamp deutlich 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.