【问题标题】:last modified file date in node.jsnode.js 中的最后修改文件日期
【发布时间】:2011-11-25 10:48:58
【问题描述】:

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

我试过了

file.lastModified;

file.lastModifiedDate;

两者都以未定义的形式返回。

【问题讨论】:

    标签: node.js


    【解决方案1】:

    使用异步/等待:

    const fs = require('fs').promises;
    const lastModifiedDate = (await fs.stat(filePath)).mtime;
    

    【讨论】:

      【解决方案2】:

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

      异步示例:

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

      同步:

      console.log(require('fs').statSync('package.json').mtimeMs);
      

      【讨论】:

        【解决方案3】:

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

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

        或同步:

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

        【讨论】:

        • 为什么使用util.inspect()
        • 这不是语言函数,它必须是他创建的用于在创建之前验证Date的函数。
        • @CarlosABS nodejs.org/api/util.html#util_util_inspect_object_options 查看文档,这是一个返回调试字符串的 Node.js 函数...
        • "util.inspect 的输出可能随时更改,不应以编程方式依赖。"与使用显式日期解析函数相比,此方法具有相当高的损坏风险。
        • 似乎在较新版本的Node中,stats.mtime已经是一个Date对象了。
        【解决方案4】:

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

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

        输出类似“文件在 300.9 秒前修改”

        【讨论】:

        • seconds = (new Date().getTime() - new Date(stats.mtime).getTime()) / 1000;
        【解决方案5】:

        你应该使用 stat 函数:

        根据documentation

        fs.stat(path, [callback])
        

        异步统计(2)。回调有两个参数(err,stats),其中 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' 
        }
        

        如您所见,mtime 是最后修改时间。

        【讨论】:

        • 您也可以使用同步版本:fs.statSync(path) 返回相同的对象。
        • @Sandro Munda 嗨,我正在使用 multer 上传图片,我必须保存每个图片的修改日期如何获取?
        猜你喜欢
        • 2016-01-20
        • 2020-05-12
        • 2019-02-26
        • 1970-01-01
        • 2010-11-05
        • 2010-09-17
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多