Start · Sprachen · JavaScript · Referenz · Metadata.modificationTime

Metadata.modificationTime

Eigenschaft

Schreibgeschütztes <code>Date</code>-Objekt mit Datum und Uhrzeit der letzten Änderung eines Dateisystemeintrags bzw. seiner Daten.

seit JavaScript Nicht standardisiert – nur Chromium-basierte Brows Kategorie: webapi

Signatur

Metadata.modificationTime

Beschreibung

Die schreibgeschützte Eigenschaft modificationTime der Schnittstelle Metadata enthält ein Date-Objekt. Es gibt an, wann der Dateisystemeintrag oder die Daten, auf die er verweist, zuletzt geändert wurden. Ein Metadata-Objekt entsteht nicht über einen Konstruktor. Man erhält es asynchron über FileSystemEntry.getMetadata() aus der File and Directory Entries API.

Typische Einsätze: Dateien nach dem Änderungsdatum sortieren, per Drag-and-drop abgelegte Dateien und Ordner mit Zeitstempel anzeigen oder in einem sandboxed Dateisystem (webkitRequestFileSystem) prüfen, ob eine zwischengespeicherte Datei veraltet ist.

Weil die Eigenschaft schreibgeschützt ist, bewirkt eine Zuweisung nichts. Das Änderungsdatum verschiebt sich nur, wenn die Datei selbst geändert wird, zum Beispiel über einen FileWriter. Bei Dateien genügt oft auch File.lastModified, ein Zeitstempel in Millisekunden, den man über FileSystemFileEntry.file() erhält.

Rückgabewert

Typ
Date
Beschreibung
Ein Date-Objekt mit dem Zeitpunkt der letzten Änderung des Eintrags.

Beispiele

Änderungsdatum einer abgelegten Datei anzeigen (Drag-and-drop)

const dropZone = document.querySelector('#drop');

dropZone.addEventListener('dragover', (e) => e.preventDefault());

dropZone.addEventListener('drop', (e) => {
  e.preventDefault();
  for (const item of e.dataTransfer.items) {
    const entry = item.webkitGetAsEntry?.();
    if (!entry) continue;

    entry.getMetadata(
      (metadata) => {
        const datum = metadata.modificationTime.toLocaleString('de-DE');
        console.log(`${entry.name}: zuletzt geändert am ${datum}`);
      },
      (err) => console.error('Metadaten nicht lesbar:', err)
    );
  }
});
bericht.pdf: zuletzt geändert am 12.3.2024, 14:05:31

getMetadata() als Promise verpacken und nach Datum sortieren

const getMetadata = (entry) =>
  new Promise((resolve, reject) => entry.getMetadata(resolve, reject));

const readEntries = (dirEntry) =>
  new Promise((resolve, reject) =>
    dirEntry.createReader().readEntries(resolve, reject)
  );

// Ordnerinhalt nach Änderungsdatum sortieren, neueste zuerst
const sortiereNachAenderung = async (dirEntry) => {
  const entries = await readEntries(dirEntry);
  const mitDatum = await Promise.all(
    entries.map(async (entry) => ({
      name: entry.name,
      geaendert: (await getMetadata(entry)).modificationTime
    }))
  );
  return mitDatum.sort((a, b) => b.geaendert - a.geaendert);
};
[{ name: 'neu.txt', geaendert: Date }, { name: 'alt.txt', geaendert: Date }]

Cache-Datei im sandboxed Dateisystem auf Alter prüfen

const MAX_ALTER_MS = 24 * 60 * 60 * 1000; // 24 Stunden

window.webkitRequestFileSystem(window.TEMPORARY, 1024 * 1024, (fs) => {
  fs.root.getFile('cache.json', { create: true }, (fileEntry) => {
    fileEntry.getMetadata((metadata) => {
      const alter = Date.now() - metadata.modificationTime.getTime();
      console.log(alter > MAX_ALTER_MS
        ? 'Cache veraltet – neu laden'
        : 'Cache ist aktuell');
    });
  });
}, (err) => console.error(err));
Cache ist aktuell

// Wichtig · Fallstricke

  • Nicht standardisiert: Metadata und FileSystemEntry.getMetadata() gehören nicht zum Standard und gelten als veraltet. Firefox und Safari bieten getMetadata() nicht an, daher vor der Nutzung per Feature-Erkennung prüfen ('getMetadata' in entry).
  • Nur Callbacks: Die API arbeitet ausschließlich mit Success- und Error-Callbacks. Für async/await muss man sie selbst in ein Promise verpacken.
  • Schreibgeschützt: Eine Zuweisung an modificationTime wird ignoriert und wirft im Strict Mode einen Fehler.
  • Zeitzonen: Das Date-Objekt beschreibt einen absoluten Zeitpunkt. Für die Anzeige toLocaleString() oder Intl.DateTimeFormat verwenden.
  • Moderne Alternative: Für neue Projekte die File System Access API (FileSystemFileHandle.getFile() → File.lastModified) oder das Origin Private File System verwenden.