首页 > 解决方案 > 如何从上次修改日期过滤文件

问题描述

我需要知道如何提及“过滤”每个日期的文件,例如当天的文件:2 到 12。

常量 fs = 要求('fs');

const testFolder = 'C:/Users/duff/Downloads/xmlpath/';

fs.readdirSync(testFolder).forEach(file => { //从文件夹中读取文件

        fs.stat(testFolder+file,'utf8', function(err,data){

      控制台.log(data.mtime); // 打印最后修改日期
    }
    );
  });

我已经尝试使用此代码,但我得到所有文件的日期而不过滤它们

文件日期的结果

标签: node.js

解决方案


所以我认为你想要做的是提供一个日期范围并返回该范围内的文件。

我正在剥离时间并与这里的日期进行比较

const fs = require('fs')

const testFolder = './test'

const parseDate = timestamp => new Date(timestamp).toISOString().slice(0, 10)

const handler = async (f, t) => {
    const startDate = parseDate(f)
    const endDate = parseDate(t)

    const timestamp = file => {
        return new Promise((resolve, reject) => {
            fs.stat(`${testFolder}/${file}`, 'utf8', (err, data) => {
                if (err) return reject(err)
                return resolve({ filename: `${testFolder}/${file}`, date: parseDate(data.mtime) })
            })
        })
    }

    const timestamps = await Promise.all(fs.readdirSync(testFolder).map(timestamp))

    return timestamps.filter(({ date }) => date >= startDate && date <= endDate)
}

handler('2020-04-01', '2020-04-10')

然后这将产生一个像这样的对象数组

[ { filename: 'C:/Users/duff/Downloads/xmlpath/test1', date: '2020-04-09' },
  { filename: 'C:/Users/duff/Downloads/xmlpath/hello', date: '2020-04-09' },
  { filename: 'C:/Users/duff/Downloads/xmlpath/new', date: '2020-04-10' },
  { filename: 'C:/Users/duff/Downloads/xmlpath/yes', date: '2020-04-10' } ]

推荐阅读