function Age(birthday)
{
    this.year    = birthday.getUTCFullYear();
    this.month   = birthday.getUTCMonth();
    this.day     = birthday.getUTCDate();
    this.hour    = birthday.getUTCHours()   || 0;
    this.minute  = birthday.getUTCMinutes() || 0;
    this.second  = birthday.getUTCSeconds() || 0;
}

Age.COMPONENTS = [ 'years', 'months', 'days', 'hours', 'minutes', 'seconds' ];

Age.prototype.current = function() 
{
    return this.on(new Date());
}

Age.prototype.on = function(date) 
{
    var years   = date.getUTCFullYear() - this.year
    var months  = date.getUTCMonth()    - this.month
    var days    = date.getUTCDate()     - this.day
    var hours   = date.getUTCHours()    - this.hour
    var minutes = date.getUTCMinutes()  - this.minute
    var seconds = date.getUTCSeconds()  - this.second

    if (seconds < 0)
    {
        seconds += 60;
        minutes -= 1;
    }
    if (minutes < 0)
    {
        minutes += 60;
        hours -= 1;
    }
    if (hours < 0)
    {
        hours += 24;
        days -= 1;
    }
    if (days < 0)
    {
        months -= 1;
    }
    if (months < 0)
    {
        months += 12;
        years -= 1;
    }
    if (days < 0)
    {
        var date = new Date(date.getUTCFullYear(), date.getUTCMonth(), 31);
        var days_in_month = (31 - date.getUTCDate()) || 31;
        days += days_in_month;
    }
    return [years, months, days, hours, minutes, seconds]
}

