File:lastModified 属性

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since January 2020.

备注: 此特性在 Web Worker 中可用。

File 接口的 lastModified 只读属性提供文件的上次修改日期,作为自 Unix 纪元(1970 年 1 月 1 日午夜)以来的毫秒数。没有已知最后修改日期的文件返回当前日期。

一个数字,表示自 Unix 纪元以来的毫秒数。

示例

下面的示例将循环遍历你选择的文件,并打印每个文件在过去一年内是否被修改过。

HTML

html
<input type="file" id="filepicker" name="fileList" multiple />
<output id="output"></output>

JavaScript

js
const output = document.getElementById("output");
const filepicker = document.getElementById("filepicker");

filepicker.addEventListener("change", (event) => {
  const files = event.target.files;
  const now = new Date();
  output.textContent = "";

  for (const file of files) {
    const date = new Date(file.lastModified);
    // 如果文件超过 1 年没有修改,则为 true
    const stale = now.getTime() - file.lastModified > 31_536_000_000;
    output.textContent += `${file.name}${
      stale ? "陈旧的" : "新的"
    }${date})。\n`;
  }
});

结果

动态创建文件

如果文件是动态创建的,可以在 File() 构造函数中提供最后修改时间。如果未提供该参数,lastModified 将会继承文件对象被创建时的时间(来自 Date.now())。

js
const fileWithDate = new File([], "file.bin", {
  lastModified: new Date(2017, 1, 1),
});
console.log(fileWithDate.lastModified); // 返回 1485903600000

const fileWithoutDate = new File([], "file.bin");
console.log(fileWithoutDate.lastModified); // 返回当前时间

时间精度降低

为了防止计时攻击和指纹识别someFile.lastModified 的精度可能会根据浏览器设置进行舍入。在 Firefox 中,privacy.reduceTimerPrecision 首选项默认启用,默认为 2ms。你还可以启用 privacy.resistFingerprinting,在这种情况下精度将为 100ms 或 privacy.resistFingerprinting.reduceTimerPrecision.microseconds 的值,以较大者为准。

例如,在降低时间精度的情况下,someFile.lastModified 的结果将始终是 2 的倍数,或者在启用 privacy.resistFingerprinting 的情况下为 100 的倍数(或 privacy.resistFingerprinting.reduceTimerPrecision.microseconds)。

js
// Firefox 60 中的时间精度降低(2 毫秒)
someFile.lastModifiedDate.getTime();
// 可能是:
// 1519211809934
// 1519211810362
// 1519211811670
// …

// 启用 `privacy.resistFingerprinting` 会降低时间精度
someFile.lastModifiedDate.getTime();
// 可能是:
// 1519129853500
// 1519129858900
// 1519129864400
// …

规范

Specification
File API
# dfn-lastModified

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
lastModified

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Has more compatibility info.

参见