Calcolo delle date di Twitter in JavaScript

Calcolo delle date di Twitter in JavaScript

Nel mio ultimo post su Html.it avevo fatto l'esempio di un ipotetico plugin jQuery per Twitter che fosse in grado di calcolare quanto tempo era passato dall'ultimo tweet su Twitter. Calcolare il tempo trascorso tra un tweet e l'altro è sicuramente un qualcosa che si rivela molto utile. JavaScript possiede alcuni metodi dell'oggetto Date che fanno al caso nostro. Vediamo come astrarre tale procedura e creare una funzione di utility che faccia al caso nostro.

La nostra funzione deve essere in grado di accettare come argomento una stringa contenente la data e l'ora del nostro tweet. Tale dato è già presente nel feed JSON restituito da Twitter. Abbiamo quindi bisogno di ottenere le varie parti che compongono questa stringa e ciò è possibile tramite il metodo split() a cui passeremo come parametro un semplice spazio.

A questo punto abbiamo un array di valori. Per i nostri calcoli sono importanti solo il secondo, terzo, quarto e sesto membro dell'array. Con questi valori assembliamo una nuova stringa separata da spazi e la passiamo al metodo parse() del oggetto Date per normalizzare il calcolo della data.

Quindi abbiamo bisogno di ottenere un valore relativo sottraendo al timestamp del tweet (ottenuto tramite il metodo getTime() applicato all'argomento della nostra funzione) il valore della stringa che abbiamo appena assemblato. Dato che stiamo utilizzando dei millisecondi, dobbiamo dividere il risultato per 1000.

Ora dobbiamo aggiungere a questo valore il valore ottenuto calcolando il tempo locale del nostro tweet (tramite il metodo getTimezoneOffset()) e moltiplicando il tutto per 60 (ottenendo così un calcolo basato sui minuti).

Infine, in base al fatto che il nostro valore sia inferiore a X minuti, restituiamo una stringa che mostra il tempo trascorso. Ecco la funzione:


function getTweetTime(timeValue) {

  var values = timeValue.split(' ');
  timeValue = values[1] + ' ' + values[2] + ', ' + values[5] + ' ' + values[3];
  var parsedDate = Date.parse(timeValue);
  var relativeTo = (arguments.length > 1) ? arguments[1] : new Date();
  var delta = parseInt((relativeTo.getTime() - parsedDate) / 1000);
  delta = delta + (relativeTo.getTimezoneOffset() * 60);

  if (delta < 60) {
    return 'meno di un minuto fa';
  } else if(delta < 120) {
    return 'circa un minuto fa';
  } else if(delta < (60*60)) {
    return (parseInt(delta / 60)).toString() + ' minuti fa';
  } else if(delta < (120*60)) {
    return 'circa un\'ora fa';
  } else if(delta < (24*60*60)) {
    return 'circa ' + (parseInt(delta / 3600)).toString() + ' ore fa';
  } else if(delta < (48*60*60)) {
    return '1 giorno fa';
  } else {
    return (parseInt(delta / 86400)).toString() + ' giorni fa';
  }
}
Torna su