Signatur
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
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)
);
}
});
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);
};
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));
// Wichtig · Fallstricke
- Nicht standardisiert:
MetadataundFileSystemEntry.getMetadata()gehören nicht zum Standard und gelten als veraltet. Firefox und Safari bietengetMetadata()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/awaitmuss man sie selbst in ein Promise verpacken. - Schreibgeschützt: Eine Zuweisung an
modificationTimewird ignoriert und wirft im Strict Mode einen Fehler. - Zeitzonen: Das
Date-Objekt beschreibt einen absoluten Zeitpunkt. Für die AnzeigetoLocaleString()oderIntl.DateTimeFormatverwenden. - Moderne Alternative: Für neue Projekte die File System Access API (
FileSystemFileHandle.getFile()→File.lastModified) oder das Origin Private File System verwenden.