I am using a custom angular.js filter for datetime objects:
function relativeTimeFilter()
{
return function (dateObj) {
return getRelativeDateTimeString(dateObj);
};
}
function getRelativeDateTimeString(dt)
{
if(!dt) return "undefined ago";
var delta = dt.getSeconds();
if (delta < 0) return "not yet";
if (delta < 1 * 60) return delta == 1 ? "one second ago" : delta + " seconds ago";
if (delta < 2 * 60) return "a minute ago";
if (delta < 45 * 60) return Math.floor(delta/60) + " minutes ago";
if (delta < 90 * 60) return "an hour ago";
if (delta < 24 * (60*60)) return Math.floor(delta/60/60) + " hours ago";
if (delta < 48 * (60*60)) return "yesterday";
if (delta < 30 * (24 * (60*60))) return Math.floor(delta/60/60/24) + " days ago";
if (delta < 12 * (30 * (24 * (60*60))))
{
var months = Math.floor(delta/60/60/24/30);
return (months <= 1) ? "one month ago" : (months + " months ago");
}
else
{
var years = Math.floor(delta/60/60/24/365);
return (years <= 1) ? "one year ago" : (years + " years ago");
}
}
module.filter("relativetime", relativeTimeFilter);
At this point, it is not so important which filter I use (I think). The filter receives a Datetime object. The relative time declaration is only valid one second. Meaning one second ago
must be updated after a second to 2 seconds ago
and so on.
When I apply the filter, this only happens once. So how do I trigger the filter appliance in a regular interval?
I tried the following:
setInterval(function() {$scope.$apply()}, 1000) // placed in controller function
...with no success.
Any ideas?