Skip to content

Instantly share code, notes, and snippets.

@vunb
Forked from rodyhaddad/timeago.filter.js
Last active August 29, 2015 14:14
Show Gist options
  • Save vunb/4a4fec5bbfe6df730b30 to your computer and use it in GitHub Desktop.
Save vunb/4a4fec5bbfe6df730b30 to your computer and use it in GitHub Desktop.
timeago filter and timeago directive with update automatically !
.directive('timeago',
[
'$timeout',
'$filter',
function($timeout, $filter) {
return function(scope, element, attrs) {
var time = parseInt(attrs.timeago) || new Date().getTime();
var intervalLength = 1000 * 10; // 10 seconds
var filter = $filter('timeago');
function updateTime() {
var timeago = filter(time);
element.text(timeago);
}
function updateLater() {
timeoutId = $timeout(function() {
updateTime();
updateLater();
}, intervalLength);
}
element.bind('$destroy', function() {
$timeout.cancel(timeoutId);
});
updateTime();
updateLater();
};
}
]
);
.filter("timeago", function () {
//time: the time
//local: compared to what time? default: now
//raw: wheter you want in a format of "5 minutes ago", or "5 minutes"
return function (time, local, raw) {
if (!time) return "never";
if (!local) {
(local = Date.now())
}
if (angular.isDate(time)) {
time = time.getTime();
} else if (typeof time === "string") {
time = new Date(time).getTime();
}
if (angular.isDate(local)) {
local = local.getTime();
}else if (typeof local === "string") {
local = new Date(local).getTime();
}
if (typeof time !== 'number' || typeof local !== 'number') {
return;
}
var
offset = Math.abs((local - time) / 1000),
span = [],
MINUTE = 60,
HOUR = 3600,
DAY = 86400,
WEEK = 604800,
MONTH = 2629744,
YEAR = 31556926,
DECADE = 315569260;
if (offset <= MINUTE) span = [ '', raw ? 'now' : 'less than a minute' ];
else if (offset < (MINUTE * 60)) span = [ Math.round(Math.abs(offset / MINUTE)), 'min' ];
else if (offset < (HOUR * 24)) span = [ Math.round(Math.abs(offset / HOUR)), 'hr' ];
else if (offset < (DAY * 7)) span = [ Math.round(Math.abs(offset / DAY)), 'day' ];
else if (offset < (WEEK * 52)) span = [ Math.round(Math.abs(offset / WEEK)), 'week' ];
else if (offset < (YEAR * 10)) span = [ Math.round(Math.abs(offset / YEAR)), 'year' ];
else if (offset < (DECADE * 100)) span = [ Math.round(Math.abs(offset / DECADE)), 'decade' ];
else span = [ '', 'a long time' ];
span[1] += (span[0] === 0 || span[0] > 1) ? 's' : '';
span = span.join(' ');
if (raw === true) {
return span;
}
return (time <= local) ? span + ' ago' : 'in ' + span;
}
})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment