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í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.";
}
}
}












