2009-11-19 3 views
3

Existe-t-il une bibliothèque ou une classe gratuite pour mettre en forme une date de façon jolie comme "5 minutes" ou "hier"?Joli texte de date en Flex/Flash/Java/C#

Je serais satisfait avec le même code dans une autre langue que je pouvais port Actionscript (comme Java ou C#)

Répondre

2

serait cette aide? Devrait être très facile à mettre en communication avec AS3.

/* 
* JavaScript Pretty Date 
* Copyright (c) 2008 John Resig (jquery.com) 
* Licensed under the MIT license. 
*/ 

// Takes an ISO time and returns a string representing how 
// long ago the date represents. 
function prettyDate(time){ 
    var date = new Date((time || "").replace(/-/g,"/").replace(/[TZ]/g," ")), 
     diff = (((new Date()).getTime() - date.getTime())/1000), 
     day_diff = Math.floor(diff/86400); 

    if (isNaN(day_diff) || day_diff < 0 || day_diff >= 31) 
     return; 

    return day_diff == 0 && (
      diff < 60 && "just now" || 
      diff < 120 && "1 minute ago" || 
      diff < 3600 && Math.floor(diff/60) + " minutes ago" || 
      diff < 7200 && "1 hour ago" || 
      diff < 86400 && Math.floor(diff/3600) + " hours ago") || 
     day_diff == 1 && "Yesterday" || 
     day_diff < 7 && day_diff + " days ago" || 
     day_diff < 31 && Math.ceil(day_diff/7) + " weeks ago"; 
} 

// If jQuery is included in the page, adds a jQuery plugin to handle it as well 
if (typeof jQuery != "undefined") 
    jQuery.fn.prettyDate = function(){ 
     return this.each(function(){ 
      var date = prettyDate(this.title); 
      if (date) 
       jQuery(this).text(date); 
     }); 
    }; 
1

J'utilise ce code Relative Time pour un widget Twitter je travaille. C'est PHP, mais rien de spécifique aux fonctionnalités donc un port devrait être assez facile.

+0

Également un bel échantillon. Merci! –

1

J'ai fini par écrire le mien.

/** 
* Takes a Date object and returns a string in the format 
* "X UNITS ago" where X is a number and UNITS is a unit of 
* time. Also has some other strings like "yesterday". 
* 
* @author Mims Wright (with thanks to John Resig) 
* 
* @param date The date to convert to a past string. 
* @param now Optional time to compare against. Default will be the present. 
*/ 
public function getTimeElapsedString(date:Date, now:Date = null):String { 

    const SEC_PER_MINUTE:int = 60; 
    const SEC_PER_HOUR:int = SEC_PER_MINUTE * 60; 
    const SEC_PER_DAY:int = SEC_PER_HOUR * 24; 
    const SEC_PER_WEEK:int = SEC_PER_DAY * 7; 
    const SEC_PER_MONTH:int = SEC_PER_DAY * 30; 
    const SEC_PER_YEAR:int = SEC_PER_MONTH * 12; 

    // if now isn't defined, make it a new Date object (the present) 
    if (!now) { now = new Date(); } 

    // don't use secondsElapsed here because the values are 
    // huge so they use uints and are never negative 
    if (now.time < date.time) { return "in the future"; } 

    // get the difference in seconds between the two values. 
    var secondsElapsed:uint = Math.floor((now.time - date.time)/1000); 


    // seconds 
    if (secondsElapsed < SEC_PER_MINUTE) { return "just now"; } 

    // minutes 
    if (secondsElapsed < SEC_PER_HOUR) { 
     var minutes:int = int(secondsElapsed/SEC_PER_MINUTE); 
     return formatAgoString(minutes, "minute"); 
    } 

    // hours 
    if (secondsElapsed < SEC_PER_DAY) { 
     var hours:int = int(secondsElapsed/SEC_PER_HOUR); 
     return formatAgoString(hours, "hour"); 
    } 

    // days 
    if (secondsElapsed < SEC_PER_WEEK) { 
     var days:int = int(secondsElapsed/SEC_PER_DAY); 
     if (days == 1) { return "yesterday"; } 

     return formatAgoString(days, "day"); 
    } 

    // weeks 
    if (secondsElapsed < SEC_PER_MONTH) { 
     var weeks:int = int(secondsElapsed/SEC_PER_WEEK); 
     return formatAgoString(weeks, "week"); 
    } 

    // months 
    if (secondsElapsed < SEC_PER_YEAR) { 
     var months:int = int(secondsElapsed/SEC_PER_MONTH); 
     return formatAgoString(months, "month"); 
    } 

    // years 
    return "more than a year ago"; 

    // Returns a string in the format "count unit(s) ago" 
    function formatAgoString(count:int, unit:String):String { 
     return count + " " + unit + (count > 1 ? "s" : "") + " ago"; 
    } 
} 
0

Vais essayer PrettyTime (github) en Java maintenant. Multi-langue et personnalisable.

Questions connexes