node.js中的最后修改文件日期

Fre*_*red 65 node.js

我正在尝试使用node.js检索服务器上文件的最后修改日期.

我试过了

file.lastModified;
Run Code Online (Sandbox Code Playgroud)

file.lastModifiedDate;
Run Code Online (Sandbox Code Playgroud)

两者都回归未定义.

San*_*nda 99

你应该使用stat函数:

根据文件:

fs.stat(path, [callback])
Run Code Online (Sandbox Code Playgroud)

异步统计(2).回调得到两个参数(错误,统计),其中stats是fs.Stats对象.它看起来像这样:

{ 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' 
}
Run Code Online (Sandbox Code Playgroud)

如您所见,这mtime是最后修改的时间.

  • 您也可以使用同步版本:fs.statSync(path)返回相同的对象. (9认同)

Ole*_*lov 42

对于节点v 4.0.0及更高版本:

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

或同步:

var stats = fs.statSync("/dir/file.txt");
var mtime = stats.mtime;
console.log(mtime);
Run Code Online (Sandbox Code Playgroud)

  • 为什么使用`util.inspect()`? (8认同)
  • 似乎在较新版本的Node中,`stats.mtime`已经是Date对象. (4认同)
  • @CarlosABS https://nodejs.org/api/util.html#util_util_inspect_object_options检查文档,它是一个返回调试字符串的Node.js函数... (2认同)

jag*_*oft 5

在这里,您可以获取文件的最后修改时间(以秒为单位)。

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

输出类似“ 300.9秒前修改文件”的内容

  • `秒 = (new Date().getTime() - new Date(stats.mtime).getTime()) / 1000;` (2认同)

can*_*ero 5

只需添加 Sandro 所说的内容,如果您想在无需解析日期或任何内容的情况尽可能快地执行检查,只需获取以毫秒为单位的时间戳(数字),请使用mtimeMs.

异步示例:

require('fs').stat('package.json', (err, stat) => console.log(stat.mtimeMs));
Run Code Online (Sandbox Code Playgroud)

同步:

console.log(require('fs').statSync('package.json').mtimeMs);
Run Code Online (Sandbox Code Playgroud)


Chr*_*ian 5

使用异步/等待:

const fs = require('fs').promises;
const lastModifiedDate = (await fs.stat(filePath)).mtime;
Run Code Online (Sandbox Code Playgroud)