Formattare e localizzare un feed JSON di Twitter in italiano richiede la conversione esplicita delle date e dei tempi in formato italiano. Twitter infatti usa la notazione inglese per le date e il fuso orario standard per calcolare i tempi dei tweet (ossia 0000). Dato che il fuso orario dell'Italia (Roma) è di due ore avanti rispetto a quello restituito da Twitter, dobbiamo operare una conversione aggiungedo 2 al numero dell'ora del tweet. Vediamo come fare.
Il formato standard delle date di Twitter è il seguente:
Tue Aug 09 10:16:05 +0000 2011
Vogliamo trasformarlo nel seguente formato:
Mar 9 Ago 2011 12:16:05
Creiamo quindi una funzione globale jQuery che, ricevuto il formato originale come parametro, lo trasforma in quello voluto:
(function($) {
$.toItalianDateTime = function(ts) {
// formato: Tue Aug 09 10:16:05 +0000 2011
var rawDateTime = ts.replace('+0000', '');
var timeChunks = rawDateTime.split(/\s/);
var day = timeChunks[0];
var month = timeChunks[1];
var dayNo = timeChunks[2];
var hms = timeChunks[3];
var year = timeChunks[5];
var hmsChunks = hms.split(':');
var hour = new Number(hmsChunks[0]) + 2; // Roma, GMT + 2
var minutes = hmsChunks[1];
var seconds = hmsChunks[2];
var itDay, itMonth, itDayNo;
switch(day) {
case 'Mon':
itDay = 'Lun';
break;
case 'Tue':
itDay = 'Mar';
break;
case 'Wed':
itDay = 'Mer';
break;
case 'Thu':
itDay = 'Gio';
break;
case 'Fri':
itDay = 'Ven';
break;
case 'Sat':
itDay = 'Sab';
break;
case 'Sun':
itDay = 'Dom';
break;
default:
break;
}
switch(month) {
case 'Sep':
itMonth = 'Set';
break;
case 'Oct':
itMonth = 'Ott';
break;
case 'Nov':
itMonth = 'Nov';
break;
case 'Dec':
itMonth = 'Dic';
break;
case 'Jan':
itMonth = 'Gen';
break;
case 'Feb':
itMonth = 'Feb';
break;
case 'Mar':
itMonth = 'Mar';
break;
case 'Apr':
itMonth = 'Apr';
break;
case 'May':
itMonth = 'Mag';
break;
case 'Jun':
itMonth = 'Giu';
break;
case 'Jul':
itMonth = 'Lug';
break;
case 'Aug':
itMonth = 'Ago';
break;
default:
break;
}
itDayNo = dayNo.replace(/^0/, '');
var italianTS = itDay + ' ' + itDayNo + ' ' + itMonth + ' ' + year + ' ' + hour + ':' + minutes + ':' + seconds;
return italianTS;
};
})(jQuery);
Come si può notare, la funzione $.toItalianDateTime()
scompone il formato originale in un array e poi opera la conversione su ciascun valore dell'array restituendo una nuova stringa. Alcune cose da evidenziare:
- per aggiungere 2 al numero dell'ora originale, la stringa è stata prima convertita in un oggetto
Number
:var hour = new Number(hmsChunks[0]) + 2; // Roma, GMT + 2
- abbiamo eliminato lo 0 iniziale dal numero del giorno:
itDayNo = dayNo.replace(/^0/, '');
Potete visionare l'esempio finale in questa pagina.