Start · Sprachen · JavaScript · Referenz · Notification.timestamp

Notification.timestamp

Eigenschaft

Gibt schreibgeschützt den Zeitstempel einer Benachrichtigung in Millisekunden seit der Unix-Epoche zurück, wie er in der Option <code>timestamp</code> gesetzt wurde.

seit JavaScript Experimentell: nur Chromium-Browser (Chrome, Edge, Kategorie: webapi

Signatur

get Notification.prototype.timestamp

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

Typ
number (EpochTimeStamp)
Beschreibung
Millisekunden seit der Unix-Epoche. Das ist entweder der Wert aus der Option 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
});
1715594400000 13.5.2024, 12:00:00

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);
number true

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());
});
Neueste: Neue Bestellung eingegangen

Unterstützung prüfen

const unterstuetztTimestamp = 'Notification' in window &&
  'timestamp' in Notification.prototype;

console.log(unterstuetztTimestamp ? 'timestamp verfügbar' : 'timestamp nicht unterstützt');
timestamp verfügbar

// 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.timestamp undefined. 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 ein TypeError ausgelö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').