Signatur
Beschreibung
Die schreibgeschützte Eigenschaft lastModified eines File-Objekts gibt an, wann die Datei zuletzt geändert wurde. Der Wert ist eine Ganzzahl in Millisekunden seit dem Unix-Epoch. Er lässt sich also direkt mit Date.now() vergleichen oder mit new Date(file.lastModified) in ein Date-Objekt umwandeln.
Typische Einsatzfälle sind Upload-Formulare, Dateimanager und Synchronisations-Werkzeuge. Man kann damit Dateien nach Alter sortieren, veraltete Dateien herausfiltern, das Änderungsdatum im Interface anzeigen oder beim Upload an den Server mitschicken, damit das ursprüngliche Datum erhalten bleibt.
Kommt die Datei aus einem <input type="file">, per Drag & Drop oder über die File System Access API, stammt der Wert aus dem Dateisystem des Benutzers. Erzeugt man ein File selbst mit new File(), kann man den Wert über die Option lastModified vorgeben. Ohne diese Option wird der Zeitpunkt der Erzeugung verwendet, also Date.now().
Rückgabewert
Beispiele
Änderungsdatum einer gewählten Datei anzeigen
// HTML: <input type="file" id="upload" multiple>
const input = document.querySelector('#upload');
input.addEventListener('change', () => {
const format = new Intl.DateTimeFormat('de-DE', {
dateStyle: 'medium',
timeStyle: 'short'
});
for (const file of input.files) {
const datum = new Date(file.lastModified);
console.log(`${file.name}: zuletzt geändert am ${format.format(datum)}`);
}
});
File mit festem Änderungsdatum erzeugen
const file = new File(['Hallo Welt'], 'notiz.txt', {
type: 'text/plain',
lastModified: new Date('2024-01-15T10:00:00Z').getTime()
});
console.log(file.lastModified);
console.log(new Date(file.lastModified).toISOString());
// Ohne Option: Zeitpunkt der Erzeugung
const jetzt = new File([''], 'leer.txt');
console.log(Math.abs(jetzt.lastModified - Date.now()) < 1000);
Nur Dateien der letzten 7 Tage hochladen, Datum mitsenden
const SIEBEN_TAGE = 7 * 24 * 60 * 60 * 1000;
const ladeAktuelleHoch = async (files) => {
const grenze = Date.now() - SIEBEN_TAGE;
const aktuelle = [...files]
.filter((f) => f.lastModified >= grenze)
.sort((a, b) => b.lastModified - a.lastModified);
for (const file of aktuelle) {
const data = new FormData();
data.append('datei', file);
// Originaldatum mitsenden, da der Server es sonst nicht kennt
data.append('lastModified', String(file.lastModified));
await fetch('/api/upload', { method: 'POST', body: data });
}
return aktuelle.length;
};
document.querySelector('#upload').addEventListener('change', async (e) => {
const anzahl = await ladeAktuelleHoch(e.target.files);
console.log(`${anzahl} Datei(en) hochgeladen`);
});
// Wichtig · Fallstricke
- Schreibgeschützt: Eine Zuweisung wie
file.lastModified = 0wird im Sloppy Mode stillschweigend ignoriert und löst im Strict Mode einenTypeErroraus. Soll das Datum anders lauten, muss man ein neuesFileerzeugen:new File([file], file.name, { type: file.type, lastModified: … }). - Nicht vertrauenswürdig: Der Wert kommt vom Client und lässt sich beliebig manipulieren. Auf dem Server darf man ihn weder für Sicherheitsentscheidungen noch als verlässlichen Beleg verwenden.
- Kein Upload-Metadatum: Mit
multipart/form-datawirdlastModifiednicht automatisch übertragen. Wer das Datum auf dem Server braucht, muss es als eigenes Feld mitsenden. - Genauigkeit: Aus Datenschutzgründen (Schutz vor Fingerprinting) können Browser den Wert runden. Firefox tut das zum Beispiel bei aktiviertem
privacy.resistFingerprinting. Zudem sind die Werte je nach Dateisystem und Betriebssystem unterschiedlich genau. - Veraltet: Das frühere
File.lastModifiedDate(einDate-Objekt) ist nicht standardisiert und wird teilweise nicht mehr unterstützt. Stattdessennew Date(file.lastModified)verwenden. - Kompatibilität: Wird von allen modernen Browsern unterstützt, auch in Web Workern. In Node.js steht die Klasse
Fileab Version 20 global zur Verfügung.