Signatur
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
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();
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();
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);
// Wichtig · Fallstricke
- Keine Unix-Zeit: Der Wert hat dieselbe Zeitbasis wie
performance.now(). Für ein Datum rechnet mannew Date(performance.timeOrigin + sensor.timestamp). MitDate.now()sollte man ihn nicht direkt vergleichen. - Auf
nullprüfen: Vor dem ersten Messwert und nachstop()isttimestampnull. Wer damit ungeprüft rechnet, erhält falsche Ergebnisse, weilnullin 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
timestampberechnen und nicht aus der angefordertenfrequency. - 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.AmbientLightSensormuss 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
TypeErroraus.