Datum der letzten Änderung der Datei in node.js.


73

Ich versuche, das letzte Änderungsdatum einer Datei auf dem Server mit node.js abzurufen.

ich habe es versucht

file.lastModified;

und

file.lastModifiedDate;

beide kommen als undefiniert zurück.

Antworten:


62

Für Knoten v 4.0.0 und höher:

fs.stat("/dir/file.txt", function(err, stats){
    var mtime = stats.mtime;
    console.log(mtime);
});

oder synchron:

var stats = fs.statSync("/dir/file.txt");
var mtime = stats.mtime;
console.log(mtime);

9
Warum mit util.inspect()?
Epoc

Es ist keine Sprachfunktion, es muss eine Funktion sein, die er erstellt hat, um das Datum vor dem Erstellen zu validieren.
Carlos ABS

2
@CarlosABS nodejs.org/api/util.html#util_util_inspect_object_options Überprüfen Sie die Dokumente, es ist eine Node.js-Funktion, die eine Debugging-Zeichenfolge zurückgibt ...
idmean

1
"Die Ausgabe von util.inspect kann sich jederzeit ändern und sollte nicht programmgesteuert abhängig sein." Diese Methode weist im Vergleich zur Verwendung einer expliziten Datumsanalysefunktion ein relativ hohes Bruchrisiko auf.
Jimrandomh

4
Es scheint, dass in neueren Versionen von Node stats.mtimebereits ein Date-Objekt vorhanden ist.
Connor Clark

102

Sie sollten die Statistikfunktion verwenden:

Laut Dokumentation :

fs.stat(path, [callback])

Asynchroner Status (2). Der Rückruf erhält zwei Argumente (err, stats), wobei stats ein fs.Stats-Objekt ist. Es sieht aus wie das:

{ dev: 2049
, ino: 305352
, mode: 16877
, nlink: 12
, uid: 1000
, gid: 1000
, rdev: 0
, size: 4096
, blksize: 4096
, blocks: 8
, atime: '2009-06-29T11:11:55Z'
, mtime: '2009-06-29T11:11:40Z'
, ctime: '2009-06-29T11:11:40Z' 
}

Wie Sie sehen können, mtimeist dies die letzte geänderte Zeit.


9
Sie können auch die Synchronisierungsversion verwenden: fs.statSync (Pfad) gibt dasselbe Objekt zurück.
Lukas Liesis

@ Sandro Munda Hallo, ich lade Bilder mit multer hoch und muss jedes Änderungsdatum des Bildes speichern. Wie kann ich es bekommen?
KS

7

Hier können Sie die letzte Änderungszeit der Datei in Sekunden abrufen.

fs.stat("filename.json", function(err, stats){
    let seconds = (new Date().getTime() - stats.mtime) / 1000;
    console.log(`File modified ${seconds} ago`);
});

Gibt so etwas wie "Datei vor 300,9 Sekunden geändert" aus.


seconds = (new Date().getTime() - new Date(stats.mtime).getTime()) / 1000;
Roland Starke

4

Fügen Sie einfach hinzu, was Sandro gesagt hat. Wenn Sie die Überprüfung so schnell wie möglich durchführen möchten, ohne ein Datum oder etwas anderes analysieren zu müssen, verwenden Sie einfach einen Zeitstempel in Millisekunden (Zahl) mtimeMs.

Asynchrones Beispiel:

require('fs').stat('package.json', (err, stat) => console.log(stat.mtimeMs));

Synchron:

console.log(require('fs').statSync('package.json').mtimeMs);
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.