0

次のようなデータベースからのISOタイムスタンプに基づいてtimeagoのような出力を表示する方法を探しています:2008-07-17T09:24:17Z

出力は次のようになります。

  • 今日使用
  • 火曜日に使用
  • 先週の火曜日に使用
  • 1か月以上前に使用

jQuery timeagoプラグインで得られるものよりもシンプルで静的なもの:http://timeago.yarp.com/

助言がありますか?ありがとう

4

1 に答える 1

1

タイムスタンプを日付オブジェクトに変換し、それをローカル (または他の) 日付オブジェクトと比較できます。次に、違いに基づいて応答を分類します。

// Expects ISO8601 long format, no decimals of seconds
function localDateFromUTC(s) {

  var x = s.split(/[-\s:tz]/i);
  var d = Date.UTC(x[0], x[1], x[2], x[3], x[4], x[5], 0);
  return new Date(d);
}

function aboutTime(s) {

  var r = Math.round;
  var now = new Date();
  var then = localDateFromUTC(s);
  var diff = r((now - then)/1000); // Convert to seconds

  if (diff < 10) return 'a few seconds ago';
  if (diff < 50) return 'less than a minute ago';
  if (diff < 70) return 'about a minute ago';
  if (diff < 35000) return 'about ' + r(diff/60) + ' minutes ago';
  if (diff < 8.64e4) return 'about ' + r(diff/3600) + ' hours ago';
  if (diff < 6.048e5) return 'about ' + r(diff/8.64e4) + ' days ago';
  // and so on
  return 'about ' + r(diff/6.048e5) + ' weeks ago';

}

alert(aboutTime('2008-07-17T09:24:17Z')); // about 200 weeks ago

数値を "about" 文字列に変換する方法をより賢くすることができます (たとえば、"about" 時間に関連するプロパティを持つオブジェクトで、数値をプロパティ名に変換します)。

于 2012-06-14T03:28:05.960 に答える