Start · Sprachen · JavaScript · Referenz · File.lastModified

File.lastModified

Eigenschaft

Liefert den Zeitpunkt der letzten Änderung einer Datei als Millisekunden seit dem Unix-Epoch (1. Januar 1970, 00:00 UTC). Die Eigenschaft ist schreibgeschützt.

seit JavaScript Baseline: alle modernen Browser (seit 2015); Node. Kategorie: webapi

Signatur

File.lastModified

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

Typ
number
Beschreibung
Ganzzahliger Zeitstempel in Millisekunden seit dem 1. Januar 1970, 00:00:00 UTC. Ist das Änderungsdatum unbekannt, liefert der Browser die aktuelle Zeit.

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)}`);
  }
});
bericht.pdf: zuletzt geändert am 12.03.2024, 14:37

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);
1705312800000 2024-01-15T10:00:00.000Z true

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`);
});
3 Datei(en) hochgeladen

// Wichtig · Fallstricke

  • Schreibgeschützt: Eine Zuweisung wie file.lastModified = 0 wird im Sloppy Mode stillschweigend ignoriert und löst im Strict Mode einen TypeError aus. Soll das Datum anders lauten, muss man ein neues File erzeugen: 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-data wird lastModified nicht 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 (ein Date-Objekt) ist nicht standardisiert und wird teilweise nicht mehr unterstützt. Stattdessen new Date(file.lastModified) verwenden.
  • Kompatibilität: Wird von allen modernen Browsern unterstützt, auch in Web Workern. In Node.js steht die Klasse File ab Version 20 global zur Verfügung.