L'analyse de la date ne devrait pas être trop difficile - tous les composants sont dans le bon ordre, il suffit de séparer les caractères spéciaux, soustraire 1 de la valeur du mois et appliquer le tableau, moins le dernier élément, Date.UTC():
function parseDate(dStr) {
var d = dStr.split(/[-:T+]/); d[1] -= 1; d.pop();
var date = new Date(Date.UTC.apply(Date, d));
Cela nous donne une date objet pour la date indiquée, le reste est tout formatage de retour chaque composant dans une chaîne:
// Declare an array of short month names
var mon = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov", "Dec"];
// Determine between AM and PM
ampm = date.getHours() > 12 ? "PM" : "AM",
// Prepare for working out the date suffix
nth = date.getDate();
// Date is nth for 11th, 12th and 13th
if (nth >= 11 && nth <= 13)
nth = "th";
// Otherwise it's st, nd, rd, th if the date ends in 1, 2, 3 or anything else
else
nth = ["", "st", "nd", "rd"][(nth+"").slice(-1)] || "th";
// Return the string formatted date
return (date.getHours() % 12) + ":" + (date.getMinutes()) + " " + ampm +
" " + mon[date.getMonth()] + " " + date.getDate() + nth;
}
// Example:
parseDate("2010-10-06T03:39:41+0000");
// -> "4:39 AM Oct 6th" (in my timezone)
Si vous voulez que la sortie soit le même quel que soit fuseau horaire (l'heure d'origine fourni), vous avez besoin d'échanger les méthodes getHours(), getMinutes(), etc pour getUTCHours(), getUTCMinutes(), etc.
Quelle est la signification du 'T' au milieu de 'date_str'? Je suppose que cela se rapporte à la façon dont nous obtenons de 03h39 à 11h39 .. –
Je pense que oui .. c'est juste la chaîne retournée de l'API Facebook .. – Trez
@ElRonnoco: Ceci est une date ISO8601, le '+ 0000' dépeint que le décalage du fuseau horaire est +0 à partir de l'UTC. Facebook affiche probablement cette date dans le fuseau horaire local de @ Trez à 11h39 (+8 heures). –