如何使用fs模块获取文件创建日期?
我在那里我正在与温斯顿旋转所产生的日志文件Linux服务器,所以filename
有文件名和创建日期,所以你可以看到第一个文件中data
server20170414181405.log
创建了2017-04-14
但使用fs.stats.birthtime
其给予FILEDATE Apr-19-2017
。我如何获得准确的文件创建日期在Linux上工作?如何使用fs模块获取文件创建日期?
cron.js
fs.stat(filePath, function (err, stats) {
if (err) return cb2(err);
var fileInfo = { fileDate: stats.birthtime, filename: file };
console.log(fileInfo);
});
数据
{ fileDate: Wed Apr 19 2017 00:51:56 GMT-0400 (EDT),
filename: 'server20170414181405.log' },
{ fileDate: Wed Apr 19 2017 00:52:04 GMT-0400 (EDT),
filename: 'server20170414212655.log' },
{ fileDate: Wed Apr 19 2017 00:52:07 GMT-0400 (EDT),
filename: 'server20170415023845.log' },
的stat.birthtime是文件创建的服务器时区的真实日期。可能是因为Winston和你的服务器在不同的时区工作而产生差异。
如果不是这样来对齐两个时区,并且您需要某个特定时区中的stat.birthtime,则可以使用moment-timezone日期构造函数。
获取真正的文件创建时间一直很困难。 Linux内核最近才开始支持它,所以我不知道这个值是多么准确。它可能取决于您使用的Linux版本。有一些背景在这个岗位:
但是,您要添加的创建时间到文件名。为什么不分析文件名并创建一个Date
对象,而不是使用fs.stat()
?
const filename = 'server20170414181405.log';
const dateString = filename.substr(6, 4) + '-' + filename.substr(10, 2)
+ '-' + filename.substr(12, 2) + 'T' + filename.substr(14, 2)
+ ':' + filename.substr(16, 2) + ':' + filename.substr(18, 2);
// '2017-04-14T18:14:05'
const createDate = new Date(dateString);
您可以添加Z
到年底UTC或正确的时区偏移,不管是什么时区您正在使用的文件名。当然,这假定您的文件名是准确的,但是,如果是这样,它似乎比使用fs.stat()
更容易且更快。
- 编辑 -
看起来你已经拥有的路径在filePath
变量的文件,这样你就可以使用path.basename()
方法获取文件名:
const path = require('path');
const filename = path.basename(filePath);
请参阅Node文档:https://nodejs.org/dist/latest-v6.x/docs/api/path.html#path_path_basename_path_ext。获得文件名后,您可以使用原始文章中的代码获取日期。
他使用的日期相隔5天。这是一个很大的时区差异! :) –