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.

Fred
quelle

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);
Oleg Mikhailov
quelle
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.

Sandro Munda
quelle
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.

jaggedsoft
quelle
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);
Cancerbero
quelle