2010-10-12 6 views
1

Comment je peux mettre en forme une chaîne de date en utilisant Javascript. Par exemple:Formatage d'une date pour la sortie

var date_str = "2010-10-06T03:39:41+0000"; 

Le résultat devrait ressembler à ceci:

11:39 AM Oct 6th 

Y at-il des idées à ce sujet? Note: date_str est un exemple de date de retour de Facebook Graph API.

Merci d'avance.

+0

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 .. –

+0

Je pense que oui .. c'est juste la chaîne retournée de l'API Facebook .. – Trez

+0

@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). –

Répondre

2

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.

+1

Génial ... Merci beaucoup Monsieur! ... – Trez

+0

@Trez: J'ai remarqué un petite erreur avec la partie suffixe de la date, je l'ai réparé maintenant. J'espère que vous verrez cela avant d'aller de l'avant et de mettre en œuvre la solution :-) –

+0

Got it ... Merci! – Trez

0

Utilisez cette fonction de phpjs.org: http://phpjs.org/functions/date:380

+0

date (format, timestamp) est correct mais le problème est de savoir comment convertir la date_str en timestamp afin que je puisse passer à la fonction. – Trez

+0

Désolé, ceci est votre fonction: http://phpjs.org/functions/strtotime:554 –

+0

Merci pour la suggestion ... – Trez

0

Date.parse peut analyser si vous arrachez la partie +0000. Vous pouvez ensuite utiliser setTime sur un objet Date, que vous pouvez imprimer vous-même ou utiliser une bibliothèque.