Signatur
Beschreibung
Die schreibgeschützte Eigenschaft timestamp des Notification-Interfaces liefert eine Zahl vom Typ EpochTimeStamp. Das ist die Anzahl der Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC. Den Wert legst du beim Erzeugen über die Option timestamp fest, entweder im Konstruktor new Notification(title, options) oder in ServiceWorkerRegistration.showNotification(title, options).
Der Zeitstempel gibt an, wann das Ereignis stattgefunden hat, auf das sich die Benachrichtigung bezieht. Er muss nicht mit dem Zeitpunkt übereinstimmen, an dem sie angezeigt wird. Das ist zum Beispiel nützlich, wenn eine Chat-Nachricht erst nach einer Offline-Phase zugestellt wird. Die Benachrichtigung zeigt dann den ursprünglichen Sendezeitpunkt und nicht den Zeitpunkt der Zustellung. Ein Zeitstempel in der Zukunft ist ebenfalls möglich, etwa für eine Erinnerung an einen bevorstehenden Termin.
Gibst du keine timestamp-Option an, setzt der Browser den Wert auf den Zeitpunkt, an dem die Benachrichtigung erzeugt wurde. Die Eigenschaft enthält also bei unterstützenden Browsern immer eine Zahl. Das Betriebssystem oder der Browser kann den Wert zum Beispiel als relative Zeitangabe („vor 5 Minuten“) anzeigen oder Benachrichtigungen danach sortieren.
Rückgabewert
timestamp oder, falls keiner angegeben wurde, der Zeitpunkt, an dem die Benachrichtigung erzeugt wurde. In nicht unterstützenden Browsern ist der Wert undefined.Beispiele
Chat-Nachricht mit ursprünglichem Sendezeitpunkt anzeigen
const zeigeNachricht = async (nachricht) => {
const erlaubnis = await Notification.requestPermission();
if (erlaubnis !== 'granted') return;
const n = new Notification(`Neue Nachricht von ${nachricht.von}`, {
body: nachricht.text,
// Zeitpunkt, zu dem die Nachricht gesendet wurde, nicht der Zeitpunkt der Zustellung
timestamp: nachricht.gesendetAm
});
console.log(n.timestamp);
console.log(new Date(n.timestamp).toLocaleString('de-DE'));
};
zeigeNachricht({
von: 'Anna',
text: 'Bist du schon da?',
gesendetAm: Date.UTC(2024, 4, 13, 10, 0, 0) // 13. Mai 2024, 10:00 UTC
});
Standardwert ohne timestamp-Option
const vorher = Date.now();
const n = new Notification('Build abgeschlossen');
// Ohne Option setzt der Browser den Zeitpunkt der Erzeugung
console.log(typeof n.timestamp);
console.log(n.timestamp >= vorher);
Benachrichtigungen im Service Worker nach Alter sortieren
// Innerhalb eines Service Workers
const aufraeumen = async () => {
const alle = await self.registration.getNotifications();
const eineStunde = 60 * 60 * 1000;
alle
.filter((n) => Date.now() - n.timestamp > eineStunde)
.forEach((n) => n.close()); // veraltete Hinweise schließen
const neueste = [...alle].sort((a, b) => b.timestamp - a.timestamp)[0];
console.log('Neueste:', neueste?.title);
};
self.addEventListener('push', (event) => {
event.waitUntil(aufraeumen());
});
Unterstützung prüfen
const unterstuetztTimestamp = 'Notification' in window &&
'timestamp' in Notification.prototype;
console.log(unterstuetztTimestamp ? 'timestamp verfügbar' : 'timestamp nicht unterstützt');
// Wichtig · Fallstricke
- Browser-Unterstützung: Die Eigenschaft ist experimentell und wird nur von Chromium-basierten Browsern (Chrome, Edge, Opera) unterstützt. Firefox und Safari werten die Option nicht aus, dort ist
notification.timestampundefined. Prüfe die Unterstützung vorher mit'timestamp' in Notification.prototype. - Schreibgeschützt: Eine Zuweisung wie
n.timestamp = Date.now()hat keine Wirkung (im strikten Modus wird einTypeErrorausgelöst). Den Wert kannst du nur beim Erzeugen setzen. - Einheit: Der Wert ist in Millisekunden angegeben, nicht in Sekunden. Unix-Zeitstempel vom Server (oft in Sekunden) musst du mit 1000 multiplizieren, sonst liegt das Datum im Jahr 1970.
- Anzeige: Ob und wie der Zeitstempel sichtbar ist, entscheiden Browser und Betriebssystem. Verlass dich nicht darauf, dass Nutzer ihn sehen. Wichtige Zeitangaben gehören zusätzlich in den
body. - Die Notifications API braucht einen sicheren Kontext (HTTPS) und die Erlaubnis der Nutzer (
Notification.permission === 'granted').