concise "50 seconds ago" rendering function
a fork from http://jsfiddle.net/tylerbrinks/kRH5T/ with improved "time-ago" rendering function (interprit)
by Adrien Joly
HTML
<abbr>abbr tag</abbr>
<div>div tag</abbr>
JavaScript
(function($) {
function refresh(options) {
var time = parse(options);
var span = timeSpan(time);
var spanType = interprit(span);
var phrase = options[spanType.type];
phrase = phrase.replace(/%d/i, spanType.count);
$(options.selector).html(phrase);
var delay = function() {
refresh(options);
};
setTimeout(delay, options.refreshRate);
}
function parse(options) {
var date = $(options.selector).attr(options.dateAttribute);
var time = $.trim(date);
time = time.replace(/\.\d\d\d+/, "");
time = time.replace(/-/, "/").replace(/-/, "/");
time = time.replace(/T/, " ").replace(/Z/, " UTC");
time = time.replace(/([\+\-]\d\d)\:?(\d\d)/, " $1$2");
return new Date(time);
}
function timeSpan(date) {
return (new Date().getTime() - date.getTime());
}
var timeScales = [
{"minute(s)":60},
{"hour(s)":60},
{"day(s)":24},
{"month(s)":30}
];
function interprit(delta) {
var t = (delta / 1000);
var lastScale = "second(s)";
for (i in timeScales) {
var scaleTitle;
for (scaleTitle in timeScales[i]);
var scaleVal = timeScales[i][scaleTitle];
if (t / scaleVal < 1) break;
t = t / scaleVal;
lastScale = scaleTitle;
}
var rnd = Math.round(t);
return {
type: lastScale.replace(/\(s\)/g, rnd > 1 ? "s" : ""),
count: rnd
};
}
$.fn.extend({
relativeTime: function(options) {
var settings = {
selector: $(this).selector,
dateAttribute: "title",
refreshRate: 10000,
second: "%d second ago",
seconds: "%d seconds ago",
minute: "%d minute ago",
minutes: "%d minutes ago",
...