1

以下の機能を実行するのが最善の方法だと思います。

  1. たとえば、HTML要素の属性からISO8601タイムスタンプを読み取ります
  2. 一定時間が経過していないか確認してください
  3. この時間が経過した場合はfunction()を実行します

この問題を解決する方法はいくつか考えられますが、どれも少し不器用で柔軟性を提供するのが難しいようです。これはリアルタイムで更新する必要はありませんが、jQueryとTimeAgoプラグイン(https://github.com/rmm5t/jquery-timeago)を使用しているので、更新できる可能性があります。

他の人がこれをやろうとした、あるいはやろうとしたと思いますが、決定的な答えは見たことがありません。

たとえば、次のHTMLがあります。

<abbr class="timeago" title="2012-12-11T17:00:00">~6 hours ago</abbr>

<span class="new">New!</span>タイムスタンプがたとえば10分未満の場合は、この後に要素を挿入します。

私たちは私たちを始めるためにこのようなことをすることができます:

$('abbr.timeago').each(function() {

    var timestamp = $(this).attr("title");

    if (function to compare time?) {
        $(this).insertAfter('<span class="new">New!</span>');
    }
});

時間を比較するための最良の方法は何ですか?

4

1 に答える 1

1

最新のブラウザのほとんどは、日付コンストラクタ内でISO8601を受け入れます。あなたがする必要があるのは、今とその後の差を数分で計算することです。

function isLessThan10MinAgo( date ) {
  return 0|(new Date() - new Date( date )) * 1.67e-5 <= 10;
}

// Current time: 22:52
console.log( isLessThan10MinAgo('2012-12-11T22:48:00-05:00')); //=> true
console.log( isLessThan10MinAgo('2012-12-11T22:12:00-05:00')); //=> false

説明:

0| // floor the result
(new Date() - new Date( date ) // obtain difference between now and then in ms.
* 1.67e-5 // convert to aprox. minutes
<= 10 // return whether is less than 10 min

使用法:

$('abbr.timeago').each(function() {
  if ( isLessThan10MinAgo( $(this).attr('title') ) ) {
    $(this).after('<span class="new">New!</span>');
  }
});
于 2012-12-12T03:58:37.387 に答える