/ Published in: ActionScript 3
Expand |
Embed | Plain Text
/** * Handles converting the time to a nicename like "2 hours ago" * @param datetime * @param display_recent * @param format * @param recent_threshold * @param backwards */ static public function timeAgoInWords(date:String="1970-01-22",time:String="00:00:00",timezone:Number = -8 , format:String = "mm/dd/yy", backwards:Boolean = false, recent_threshold:Number = 60):String{ /** * Take special care to notice that month (4) is zero-based, meaning that January is 0, and December is 11. * Hour, the 4th parameter, starts with 0 as midnight, and ends with 23 as 11pm. The constructor is in the format * new Date(year, month, day, hours, minutes, seconds, milliseconds). */ //Parse the date trace("========= DATE ========== "); trace(" "+ date); var dateArray:Array = date.split("-",3); var dYear:Number = Number(dateArray[0]); var dMonth:Number = Number(dateArray[1])-1; var dDay:Number = Number(dateArray[2]); // trace(" year: " + dateArray[0]); trace(" month: " + dateArray[1]); trace(" day: " + dateArray[2]); var timeArray:Array = time.split(":"); var dMin:Number = Number(timeArray[1]); var dHour:Number = Number(timeArray[0]); var meridian:String; if(dHour > 23){ meridian = "PM"; dHour = 12; }else{ meridian = "AM"; } //dHour %= 24; var dSec:Number = Number(timeArray[2]); trace(" min: " + dMin); trace(" hour: " + dHour); trace(" sec: " + dSec); var datetime:Date = new Date(); trace(" timezone: " + timezone); //datetime = DateUtility.ChangeTimezone(datetime, timezone); datetime.setUTCFullYear(dYear,dMonth,dDay); datetime.setUTCHours(dHour,dMin,dSec,0); //var datetime:Date = new Date(dMonth+"/"+dDay+"/"+dYear+" "+time + " "+meridian); trace(" "+datetime+" "); trace("========================= "); var in_seconds:Number = datetime.getTime()/1000; //Get the Date in seconds var now:Date = new Date(); var diff:Number; var months:Number; var weeks:Number; var days:Number; var hours:Number; var minutes:Number; var seconds:Number; //var secondsSince:Number = Math.floor(now.time); //The number of seconds since midnight January 1, 1970, universal time, for a Date object. //trace(" Seconds since January 1, 1970 -> " + secondsSince); var secondsSince:Number = now.getTime()/1000; //Get the Date in seconds if (backwards) { diff = in_seconds - secondsSince; } else { diff = secondsSince - in_seconds; } var dif:Number = diff; months = Math.floor(dif / 2419200); dif -= months * 2419200; weeks = Math.floor(dif / 604800); dif -= weeks * 604800; days = Math.floor(dif / 86400); dif -= days * 86400; hours = Math.floor(dif / 3600); dif -= hours * 3600; minutes = Math.floor(dif / 60); dif -= minutes * 60; seconds = dif; var old:Boolean; if (months > 0) { // over a month old, just show date (mm/dd/yyyy format) //trace("format: " + format); var relative_date:String = 'on ' + formatTo(datetime,format); trace("=== FORMAT -> " + formatTo(datetime,format)); old = true; } else { relative_date = ''; old = false; if (weeks > 0) { // weeks and days relative_date += (relative_date ? ', ' : '') + weeks + ' week' + (weeks > 1 ? 's' : ''); relative_date += days > 0 ? (relative_date ? ', ' : '') + days + ' day' + (days > 1 ? 's' : '') : ''; } else if(days > 0) { // days and hours relative_date += (relative_date ? ', ' : '') + days + ' day' + (days > 1 ? 's' : ''); relative_date += hours > 0 ? (relative_date ? ', ' : '') + hours + ' hour' + (hours > 1 ? 's' : '') : ''; } else if(hours > 0) { // hours and minutes relative_date += (relative_date ? ', ' : '') + hours + ' hour' + (hours > 1 ? 's' : ''); relative_date += minutes > 0 ? (relative_date ? ', ' : '') + minutes + ' minute' + (minutes > 1 ? 's' : '') : ''; } else if(minutes > 0) { // minutes only relative_date += (relative_date ? ', ' : '') + minutes + ' minute' + (minutes > 1 ? 's' : ''); } else { // seconds only relative_date += (relative_date ? ', ' : '') + Math.round(seconds) + ' second' + (seconds != 1 ? 's' : ''); } } var ret:String = relative_date; // show relative date and add proper verbiage if (!backwards && !old) { ret += ' ago'; } /*if(display_recent) { if(dif<=recent_threshold) { ret = '<span class="recent">'+ret+'</span>'; } }*/ return ret; //return formatTo(datetime,format) + " " +time; }
You need to login to post a comment.
