Secciones

Artículos para tus primeros pasos

Si estás empezando a introducirte en el mundo de Groovy y Grails, no te pierdas nuestros artículos básicos: 

Entrevistas con los expertos
 

Los protagonistas te cuentan de qué van los proyectos más importantes del mundo Groovy:


Un proyecto de:
ImaginaWorks
Escuela de Groovy

Nuestro PrettyTime particular

viernes 19/06/2009

Ayer se publicó en TheServerSide la librería PrettyTime, que permite transformar un Date en "intervalos sociales", del tipo "three days ago" o "last tuesday". El caso es que, como habréis notado, en groovy.org.es usamos la misma técnica para indicar el tiempo que hace que se publicó una noticia, mediante un Tag de grails que desarrollamos hace ya bastante tiempo.

La usamos así

<g:howMuchTimeAgo value="${story.pubDate" />

Os dejo aquí el código por si le puede servir a alguien:

 

/* =============================================================================
           Copyright 2008 ImaginaWorks Software Factory, S.L.

       Licensed under the Apache License, Version 2.0 (the "License");
       you may not use this file except in compliance with the License.
       You may obtain a copy of the License at

           http://www.apache.org/licenses/LICENSE-2.0

       Unless required by applicable law or agreed to in writing, software
       distributed under the License is distributed on an "AS IS" BASIS,
       WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
       See the License for the specific language governing permissions and
       limitations under the License.
================================================================================= */




import com.imaginaworks.util.DateUtils

class DateUtilsTagLib {

    def howMuchTimeAgo = { attrs ->
            def value = attrs['value'];
            if(value){
                long millis = System.currentTimeMillis() - value.getTime();
                // Get difference in seconds
                long diffSecs = millis/(1000);
                // Get difference in minutes
                long diffMins = millis/(60*1000);
                // Get difference in hours
                long diffHours = millis/(60*60*1000);
                // Get difference in days
                long diffDays = millis/(24*60*60*1000);
                // Get difference in weeks
                long diffWeeks = millis/(7*24*60*60*1000);
                //si es de hace más de 3 semanas pongo la fecha.
                if(diffWeeks>3){
                    out<<DateUtils.format(value,'EEEE dd/MM/yyyy');
                }
                else if(diffWeeks > 0){
                    if(diffWeeks == 1){
                        out<<"Publicado el ${DateUtils.format(value,'EEEE')} de la semana pasada.";
                    }
                    else {
                        out<<"Publicado hace ${diffWeeks} semanas.";
                    }
                }
                else if(diffDays > 0){
                    if(diffDays == 1){
                        out<<"Publicado ayer a las ${DateUtils.format(value,'HH:mm')}.";
                    }
                    else {
                        out <<"Publicado hace ${diffDays} d&#237;as.";
                    }
                }
                else if(diffHours > 0){
                    out<<"Publicado hace ${diffHours} horas ${diffMins - diffHours*60} minutos.";
                }
                else if(diffMins > 0){
                    out<<"Publicado hace ${diffMins} minutos.";
                }
                else{
                    out<<"Publicado hace ${diffSecs} segundos.";
                }
            }
            else{
                out << "Fecha desconocida.";
            }
    }
}


Contenidos relacionados:



0 comentarios:

Tienes que estar registrado para iniciar sesión y poder publicar tus comentarios