twitterAgregándo la funcionalidad de to2twitter al Directorio de Blogs de Venezuela, me encuentro con que el badge Javascript ofrecido por twitter no funciona bien en Internet Explorer.

El error se presenta en la función relative_time:

JavaScript:
  1. function relative_time(time_value) {
  2.      var parsed_date = Date.parse(time_value);
  3.  
  4.      var relative_to = (arguments.length> 1) ? arguments[1] : new Date();
  5.      var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
  6.  
  7.      if(delta <60) {
  8.          return 'less than a minute ago';
  9.      } else if(delta <120) {
  10.          return 'about a minute ago';
  11.      } else if(delta <(45*60)) {
  12.          return (parseInt(delta / 60)).toString() + ' minutes ago';
  13.      } else if(delta <(90*60)) {
  14.          return 'about an hour ago';
  15.      } else if(delta <(24*60*60)) {
  16.          return 'about ' + (parseInt(delta / 3600)).toString() + ' hours ago';
  17.      } else if(delta <(48*60*60)) {
  18.          return '1 day ago';
  19.      } else {
  20.          return (parseInt(delta / 86400)).toString() + ' days ago';
  21.      }
  22.   }

Las fechas devueltas por twitter están en el siguiente formato:

JavaScript:
  1. "Tue May 01 12:35:05 +0000 2007"

Al intentar hacer el Date.parse con esos valores, Internet Explorer devuelve un NaN, con lo cual el resultado de la función relative_time es algo como "NaN days ago".

La alternativa es convertir el formato de las fechas devueltas por twitter a:

JavaScript:
  1. "May 01, 2007 12:35:05"

Para que el Date.parse se ejecute bien en IE.

La nueva función relative_time (con mensajes en español) queda de esta forma:

JavaScript:
  1. function relative_time(time_value) {
  2.     var values = time_value.split(" ");
  3.     time_value = values[1]+" "+values[2]+", "+values[5]+" "+values[3];
  4.     var parsed_date = Date.parse(time_value);
  5.  
  6.     var relative_to = (arguments.length> 1) ? arguments[1] : new Date();
  7.     var delta = parseInt((relative_to.getTime() - parsed_date) / 1000);
  8.     delta = delta + (relative_to.getTimezoneOffset()*60);
  9.  
  10.     if(delta <60) {
  11.         return 'hace menos de un minuto';
  12.     } else if(delta <120) {
  13.         return 'hace un poco más de un minuto';
  14.     } else if(delta <(45*60)) {
  15.         return 'hace ' + (parseInt(delta / 60)).toString() + ' minutos';
  16.     } else if(delta <(90*60)) {
  17.         return 'hace más de una hora';
  18.     } else if(delta <(24*60*60)) {
  19.        return 'hace ' + (parseInt(delta / 3600)).toString() + ' horas';
  20.     } else if(delta <(48*60*60)) {
  21.        return 'hace 1 día';
  22.     } else {
  23.        return 'hace ' + (parseInt(delta / 86400)).toString() + ' días';
  24.     }
  25. }

El cambio en el manejo del delta:

JavaScript:
  1. delta = delta + (relative_to.getTimezoneOffset()*60);

es para asegurar la diferencia entre las fechas dado el huso horario del navegador cliente.


2 Respuestas a “Ajuste al Badge Javascript de Twitter para que funcione en Internet Explorer”

  1. 1 MeTz

    Muy interestante, pero como lo aplico? twitter solo me da un embed, nada de javascript :o, escribeme a mi correo por favor :D

  2. 2 Steve

    GRACIAS, muchísimas gracias, me sirvió bastante.
    GRACIAS!


RSS feeds

Suscríbete a nuestros RSS Feeds