【jQuery】$.ajaxで取得したファイルが、更新からn時間以上経過していたら

ファイルの更新時間と現在時刻を比較

アクセスしたファイルが更新から24時間以上経過していたら、
という処理をjQueryで書く必要があり、色々努力した結果下記のようになりました。

$.ajax({
  url:'file.txt',
  success: function( data, status, request ){

    var time  = new Date( request.getResponseHeader('Last-Modified') ), //ファイル更新時間
        now   = new Date( $.now() ), //現在時刻
        hours = Math.abs( now - time ) / 36e5; //時間差を計算

    if ( hours > 24 ) {
      alert( '24時間以上経過' );
    } else {
      alert( '24時間以内' );
    }

  }
});

5行目でレスポンスヘッダのLast-Modifiedを取得。
Last-Modifiedはファイルの最終更新日を返します。

7行目の「36e5」は60 * 60 * 1000の科学記法です。

なおPHPでも同様のことが出来ます。

【PHP】別ドメインのファイルが、更新からn時間以上経過していたら

おまけ、取得したLast-Modifiedをyyyy/MM/dd HH:mm:ssにする

Last-Modifiedはそのままだと、下記のようなフォーマットです。

Mon Nov 21 2016 16:34:11 GMT+0900 (JST)

これをyyyy/MM/dd HH:mm:ssに変換します。

$.ajax({
  url:'file.txt',
  success: function( data, status, request ){
 
    var time  = new Date( request.getResponseHeader('Last-Modified') );
    alert(date_format(time))
 
  }
});

function date_format( time ) {
  var yy = zero_pad( time.getFullYear() ),
      mm = zero_pad( time.getMonth() + 1 ),
      dd = zero_pad( time.getDate() ),
      h  = zero_pad( time.getHours() ),
      m  = zero_pad( time.getMinutes() ),
      s  = zero_pad( time.getSeconds() );
 
  return time = yy + '/' + mm + '/' + dd + ' ' + h + ':' + m + ':' + s;
}
 
function zero_pad( numb ) {
  return ( numb < 10 ? '0' : '' ) + numb;
}

getMonthで月を取得すると英単語だった月名が、0〜11の数字になって帰ってきます。
日本人は1〜12月の感覚ですが、英表記ではもともと数字ではないので、
これでも自然に感じるのでしょうか? とりあえず、1を足しておきました。

そういでば、Octoberも本来は8番目の月という意味ですから、
英語圏の方々には月に関して、数字はあんまり重要じゃないのかもしれません。

ずれたのは古代ローマ人がカエサルとアウグストゥスを神格化し、
彼らの誕生月にその名前を冠したため、というのは有名な話ですよね。

Writer

ko

KO

誕生日に会社のみんなから『世界文学全集』をプレゼントしてもらった読書好きフロントエンド・エンジニアです。WordPressとMovableTypeが得意ですが、本当の特技は薪割りです。

Page Topへ