Start · Sprachen · JavaScript · Referenz · Sensor.timestamp

Sensor.timestamp

Eigenschaft

Die schreibgeschützte Eigenschaft <code>timestamp</code> gibt den Zeitpunkt der letzten Sensorabfrage als <code>DOMHighResTimeStamp</code> zurück, oder <code>null</code>, solange noch kein Messwert da ist.

seit JavaScript Generic Sensor API — Chromium-Browser (Chrome/Edge Kategorie: webapi

Signatur

Sensor.timestamp

Beschreibung

Die Eigenschaft timestamp gehört zum Basis-Interface Sensor der Generic Sensor API. Sie ist deshalb auf allen abgeleiteten Sensoren vorhanden, zum Beispiel Accelerometer, Gyroscope, Magnetometer, AmbientLightSensor, AbsoluteOrientationSensor und RelativeOrientationSensor. Sie gibt an, wann der aktuell gespeicherte Messwert erfasst wurde.

Der Wert ist ein DOMHighResTimeStamp in Millisekunden. Er wird auf derselben Zeitbasis wie performance.now() gemessen, also relativ zu performance.timeOrigin. Es ist keine Unix-Zeit. Solange der Sensor noch keinen Messwert geliefert hat (vor dem ersten reading-Event oder nach stop()), ist der Wert null.

Gebraucht wird timestamp vor allem für zeitabhängige Berechnungen: Man kann den tatsächlichen Abstand zwischen zwei Messungen bestimmen (etwa um Winkelgeschwindigkeiten zu integrieren oder Geschwindigkeiten zu schätzen), die echte Abtastrate prüfen, veraltete Werte erkennen oder Messwerte mehrerer Sensoren zeitlich einander zuordnen.

Rückgabewert

Typ
DOMHighResTimeStamp | null
Beschreibung
Zeitpunkt der letzten Messung in Millisekunden, relativ zu performance.timeOrigin. null, wenn noch kein Messwert vorliegt.

Beispiele

Zeitstempel beim reading-Event ausgeben

const acc = new Accelerometer({ frequency: 10 });

console.log(acc.timestamp); // noch kein Messwert

acc.addEventListener('reading', () => {
  console.log(`Messung bei ${acc.timestamp.toFixed(1)} ms: x=${acc.x.toFixed(2)}`);
});

acc.addEventListener('error', (e) => console.error(e.error.name, e.error.message));
acc.start();
null Messung bei 1532.4 ms: x=0.12 Messung bei 1632.6 ms: x=0.10

Drehwinkel aus dem Gyroskop integrieren (Delta-Zeit)

const gyro = new Gyroscope({ frequency: 60 });
let lastTs = null;
let angleZ = 0; // Radiant

gyro.addEventListener('reading', () => {
  if (lastTs !== null) {
    const dt = (gyro.timestamp - lastTs) / 1000; // Sekunden
    angleZ += gyro.z * dt;
  }
  lastTs = gyro.timestamp;
  console.log(`Winkel Z: ${(angleZ * 180 / Math.PI).toFixed(1)}°`);
});

gyro.start();
Winkel Z: 0.0° Winkel Z: 0.4° Winkel Z: 1.1°

Alter des Messwerts prüfen und echte Frequenz messen

const light = new AmbientLightSensor();
const stamps = [];

light.onreading = () => {
  stamps.push(light.timestamp);
  if (stamps.length === 10) {
    const avgMs = (stamps.at(-1) - stamps[0]) / (stamps.length - 1);
    console.log(`Tatsächliche Frequenz: ${(1000 / avgMs).toFixed(1)} Hz`);
  }
};
light.start();

// Ist der letzte Wert älter als 2 Sekunden?
setInterval(() => {
  const age = light.timestamp === null ? Infinity : performance.now() - light.timestamp;
  if (age > 2000) console.warn('Messwert veraltet oder nicht vorhanden');
}, 1000);
Tatsächliche Frequenz: 4.9 Hz

// Wichtig · Fallstricke

  • Keine Unix-Zeit: Der Wert hat dieselbe Zeitbasis wie performance.now(). Für ein Datum rechnet man new Date(performance.timeOrigin + sensor.timestamp). Mit Date.now() sollte man ihn nicht direkt vergleichen.
  • Auf null prüfen: Vor dem ersten Messwert und nach stop() ist timestamp null. Wer damit ungeprüft rechnet, erhält falsche Ergebnisse, weil null in Berechnungen als 0 zählt.
  • Geringere Genauigkeit: Zum Schutz vor Fingerprinting und Timing-Angriffen können Browser die Auflösung verringern und die Abtastrate begrenzen. Deshalb sollte man die Delta-Zeit immer aus timestamp berechnen und nicht aus der angeforderten frequency.
  • Kompatibilität: Nur Chromium-Browser unterstützen die API (Chrome, Edge, Opera, Samsung Internet). Firefox und Safari unterstützen sie nicht. Nötig sind ein sicherer Kontext (HTTPS), die passenden Berechtigungen (z. B. accelerometer, gyroscope) und eine Permissions Policy, die den Zugriff erlaubt. AmbientLightSensor muss zusätzlich per Flag aktiviert werden. Vor der Nutzung sollte man die Unterstützung prüfen, z. B. mit 'Accelerometer' in window.
  • Die Eigenschaft ist schreibgeschützt. Eine Zuweisung wird ignoriert; im strikten Modus löst sie einen TypeError aus.