/*
how to convert 1237891273 seconds into 39 years 2 months 23 days 10 hours 41 minutes and 13 seconds.
credits: Dan Florio, aka: polyGeek
http://polygeek.com/flex/513_ConvertSecondsToEnglish/srcview/index.html
*/

package utils {
    public class DateToEnglish {
        public function DateToEnglish() {}
        
        public static const EXACT_SECONDS_IN_YEAR:uint =     31556926;     // according to Google
        public static const EXACT_SECONDS_IN_MONTH:Number =    2629743.83;    // according to Google
        public static const EXACT_SECONDS_IN_DAY:uint =        86400;        // according to Google
        
        public static const SECONDS_IN_MONTH:Number =        60 * 60 * 24 * 30.4167;// non leap year
        public static const SECONDS_IN_DAY:uint =             60 * 60 * 24;//    86400;
        public static const SECONDS_IN_YEAR:uint =             SECONDS_IN_DAY * 365;
        
        public static const MILLISECONDS_IN_MINUTE:int =     1000 * 60;
        public static const MILLISECONDS_IN_HOUR:int =         1000 * 60 * 60;
        public static const MILLISECONDS_IN_DAY:int =         1000 * 60 * 60 * 24;

        public static function convertSeconds( n:Number ):String {
            n *= 1000;
            
            var d:String = "";
            var and:String;
            var time:Date = new Date( n );
            
            var years:uint = time.fullYearUTC - 1970;
            var months:uint = time.monthUTC;
            var days:uint = time.dateUTC - 1;
            var hours:uint = time.hoursUTC;
            var mins:uint = time.minutesUTC;
            var secs:uint = time.secondsUTC;
            
            // years    
            if( years > 0 && ( months > 0 || days > 0 || hours > 0 || mins > 0 || secs > 0 ) ) {
                d = ( years > 1 ) ?
                                        String( years ) + " years" :
                                        "1 year";
            } else if( years > 0 ){
                d = ( years > 1 ) ?
                                        String( years ) + " years." :
                                        "1 year.";
            }
            
            // months
            if( months > 0 && ( days > 0 || hours > 0 || mins > 0 || secs > 0 ) ) {    
                d = insertEndSpace( d );
                d += ( months > 1 ) ?
                                        String( months ) + " months" :
                                        "1 month";
            } else if( months > 0 ) {
                and = ( d.length > 0 ) ? " and " : "";
                d += ( months > 1 ) ?
                                        and + String( months ) + " months" :
                                        and + "1 month.";
                
            }
            
            // days
            if( days > 0 && ( hours > 0 || mins > 0 || secs > 0 ) ) {
                d = insertEndSpace( d );
                d += ( days > 1 ) ?
                                        String( days ) + " days" :
                                        "1 day";
            } else if( days > 0 ) {
                and = ( d.length > 0 ) ? " and " : "";
                d += ( days > 1 ) ?
                                        and + String( days ) + " days" :
                                        and + "1 day.";
            }
            
            // hours
            if( hours > 0 && ( mins > 0 || secs > 0 ) ) {
                d = insertEndSpace( d );
                d += ( hours > 1 ) ?
                                        String( hours ) + " hours" :
                                        "1 hour";
            } else if( hours > 0 ) {
                and = ( d.length > 0 ) ? " and " : "";
                d += ( hours > 1 ) ?
                                        and + String( hours ) + " hours" :
                                        and + "1 hour.";                
            }
            
            // minutes
            if( mins > 0 && secs > 0 ) {
                d = insertEndSpace( d );
                d += ( mins > 1 ) ?
                                        String( mins ) + " minutes" :
                                        "1 minute";
            } else if( mins > 0 ) {
                and = ( d.length > 0 ) ? " and " : "";
                d += ( mins > 1 ) ?
                                        and + String( mins ) + " minutes" :
                                        and + "1 minute.";
            }
            
            // seconds    
            if( secs > 0 && d.length > 0 ) {
                d += ( secs > 1 ) ?
                                        " and " + String( secs ) + " seconds." :
                                        " and 1 second.";
            } else if( secs > 0 ) {
                d = insertEndSpace( d );
                d += ( secs > 1 ) ?
                                        String( secs ) + " seconds." :
                                        "1 second.";
            }        
            return d;
        }
        
        private static function insertEndSpace( s:String ):String {
            s += ( s.length > 0 ) ? " " : "";
            return s;
        }

    }
}
admin