File.lastModified

File.lastModified 読み取り専用プロパティは、ファイルの最終更新日時を UNIX エポック (1970 年 1 月 1 日の深夜 0 時) からのミリ秒数で返します。最終更新日時がわからないファイルは、現在の日時を返します。

構文

var time = instanceOfFile.lastModified;

UNIX エポックからのミリ秒数を表す数値。

file 入力欄からの読み込み

<input type="file" multiple id="fileInput">
const fileInput = document.querySelector('#fileInput');
fileInput.addEventListener('change', (event) => {
  // filesはFileList型オブジェクト (NodeListと似ている)
  const files = event.target.files;

  for (let file of files) {
    const date = new Date(file.lastModified);
    console.log(`${file.name} has a last modified date of ${date}`);
  }
});

以下の結果を試してみてください。

動的に生成されるファイル

ファイルが動的に生成された場合、最終更新日時は new File() コンストラクター関数で指定できます。ファイルが見つからない場合、 lastModifiedFile オブジェクトの作成時に Date.now() から現在の時刻を継承します。

var fileWithDate = new File([], 'file.bin', {
  lastModified: new Date(2017, 1, 1),
});
console.log(fileWithDate.lastModified); //returns 1485903600000

var fileWithoutDate = new File([], 'file.bin');
console.log(fileWithoutDate.lastModified); //returns current time

時間の精度の低下

タイミング攻撃やフィンガープリンティングに対する保護機能を提供するために、someFile.lastModified の精度はブラウザーの設定に応じて丸められることがあります。
Firefox では、privacy.reduceTimerPrecision 設定は既定で有効になっており、 Firefox 59 では既定で 20 us に設定されています。60 で 2 ms になります。

// reduced time precision (2ms) in Firefox 60
someFile.lastModified;
// 1519211809934
// 1519211810362
// 1519211811670
// ...


// reduced time precision with `privacy.resistFingerprinting` enabled
someFile.lastModified;
// 1519129853500
// 1519129858900
// 1519129864400
// ...

Firefox では、privacy.resistFingerprinting を有効にすることもできます。精度は 100 ms か privacy.resistFingerprinting.reduceTimerPrecision.microseconds のいずれか大きい方の値になります。

仕様書

仕様書 状態 備考
File API
lastModified の定義
草案 初回定義

ブラウザーの対応

BCD tables only load in the browser

関連情報