2013-03-19 5 views
2

Comment puis-je convertir une représentation sous forme de chaîne d'une date en un vrai objet de date javascript?convertir une chaîne de date personnalisée en objet de date

la date a le format suivant

E MMM dd HH:mm:ss Z yyyy 

par exemple

Sat Jun 30 00:00:00 CEST 2012 

Merci à l'avance

EDIT: Ma solution de travail est basée sur la réponse acceptée. Pour le faire fonctionner dans IE8, vous devez remplacer la partie mois (par exemple juin) par le nombre de mois (par exemple 5 pour juin, car janvier est 0)

+0

Parse, créez une chaîne valide et appeler le constructeur Date. –

+0

Copie possible: http://stackoverflow.com/questions/5510580/convert-string-to-datetime –

+0

et comment puis-je gérer le 'Z'? – Luke94

Répondre

6

Votre chaîne de date peut être analysée en l'état, mais CEST isn ' t un fuseau horaire valide dans ISO 8601, donc vous devrez le remplacer manuellement par +0200.

Une solution simple pourrait donc:

var str = "Sat Jun 30 00:00:00 CEST 2012"; 
str = str.replace(/CEST/, '+0200'); 
var date = new Date(str); 

Si vous souhaitez soutenir d'autres fuseaux horaires définis par leur nom, vous devrez trouver leurs valeurs possibles et le décalage pertinent. Vous pouvez les enregistrer sur une carte:

var replacements = { 
    "ACDT": "+1030", 
    "CEST": "+0200", 
    ... 
}; 
for (var key in replacements) str = str.replace(key, replacements[key]); 
var date = new Date(str); 

This might be a good list of time zone abbreviation.

+0

testé? Je me souviens que Firefox était assez strict quant aux dates d'acceptation. Cela fonctionne dans Chrome, cependant. –

+1

Testé dans Firefox et Chrome. –

+0

Pouvez-vous tester dans IE aussi, ou devrais-je? –

0

Vous pouvez utiliser le code ci-dessous pour convertir la chaîne en datetime:

var sDate = "01/09/2013 01:10:59"; 
var dateArray = sDate.split('/'); 
var day = dateArray[1]; 

// Attention! JavaScript consider months in the range 0 - 11 
var month = dateArray[0] - 1; 
var year = dateArray[2].split(' ')[0]; 
var hour = (dateArray[2].split(' ')[1]).split(':')[0]; 
var minute = (dateArray[2].split(' ')[1]).split(':')[1]; 
var objDt = new Date(year, month, day, hour, minute); 
alert(objDt); 
Questions connexes