【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でも同様のことが出来ます。
おまけ、取得した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
誕生日に会社のみんなから『世界文学全集』をプレゼントしてもらった読書好きフロントエンド・エンジニアです。WordPressとMovableTypeが得意ですが、本当の特技は薪割りです。