Comment créer un objet de date à partir d'une chaîne dans javascript

Ayant cette chaîne 30/11/2011 . Je veux le convertir en objet date.

Dois-je utiliser:

 Date d = new Date(2011,11,30); /* months 1..12? */ 

ou

 Date d = new Date(2011,10,30); /* months 0..11? */ 

?

 var d = new Date(2011,10,30); 

Comme les mois sont indexés de 0 en js.

Vous voulez certainement utiliser la deuxième expression puisque les mois de JS sont énumérés à partir de 0.

Vous pouvez également utiliser la méthode Date.parse, mais elle utilise un format de date différent:

 var d = Date.parse("11/30/2011"); 

La syntaxe est la suivante:

 new Date(year, month, day [, hour, minute, second, millisecond ]) 

alors

 Date d = new Date(2011,10,30); 

est correct; Heure, minute, seconde, milliseconde sont facultatives.

https://developer.mozilla.org/fr/JavaScript/Reference/Global_Objects/Date

Il existe plusieurs méthodes de création de la date, comme indiqué ci-dessus. Je ne répéterais pas les mêmes choses. Voici une petite méthode pour convertir String en Date dans Java Script si c'est ce que vous recherchez,

 function compareDate(str1){ // str1 format should be dd/mm/yyyy. Separator can be anything eg / or -. It wont effect var dt1 = parseInt(str1.substring(0,2)); var mon1 = parseInt(str1.substring(3,5)); var yr1 = parseInt(str1.substring(6,10)); var date1 = new Date(yr1, mon1-1, dt1); return date1; } 

Très simple:

 var dt=new Date("2011/11/30"); 

La date devrait être au format ISO aaa / MM / jj.

Tout d'abord, extrayez la chaîne comme celle-ci

 var dateString = str.match(/^(\d{2})\/(\d{2})\/(\d{4})$/); 

Alors,

 var d = new Date( dateString[3], dateString[2]-1, dateString[1] ); 

Toujours, pour tout problème concernant les spécifications JavaScript dans la pratique, je recommanderai fortement le Mozilla Developer Network et leur référence JavaScript .

Comme il l'indique dans le sujet de l'objet Date sur la variante argument que vous utilisez:

 new Date(year, month, day [, hour, minute, second, millisecond ]) 

Et à propos du paramètre mois:

Mois Valeur entière représentant le mois, commençant par 0 pour janvier à 11 pour décembre.

De toute évidence, vous devriez utiliser le numéro de mois 10 pour novembre.

PS: La raison pour laquelle je recommande le MDN est l'exactitude, une bonne explication des choses, des exemples et du diagramme de compatibilité du navigateur.

Je ne peux pas croire que javascript n'est pas plus compatible avec les dates d'analyse. Et j'entends la valeur par défaut quand il n'y a pas de fuseau horaire qui va passer d'UTC à local – j'espère que le Web est préparé;)

Je préfère laisser Javascript faire le travail lourd quand il s'agit de dates d'analyse. Cependant, il serait bon de gérer le problème de la fuseau horaire local de manière assez transparente. En tenant compte de ces deux éléments, voici une fonction pour le faire avec le statu quo actuel – et lorsque Javascript change, il fonctionnera encore, mais peut être supprimé (avec un peu de temps pour les utilisateurs de rattraper les anciens navigateurs / nodejs bien sûr).

 function strToDate(dateStr) { var dateTry = new Date(dateStr); if (!dateTry.getTime()) { throw new Exception("Bad Date! dateStr: " + dateStr); } var tz = dateStr.trim().match(/(Z)|([+-](\d{2})\:?(\d{2}))$/); if (!tz) { var newTzOffset = dateTry.getTimezoneOffset() / 60; var newSignStr = (newTzOffset >= 0) ? '-' : '+'; var newTz = newSignStr + ('0' + Math.abs(newTzOffset)).slice(-2) + ':00'; dateStr = dateStr.trim() + newTz; dateTry = new Date(dateStr); if (!dateTry.getTime()) { throw new Exception("Bad Date! dateStr: " + dateStr); } } return dateTry; } 

Nous avons besoin d'un objet de date indépendamment; Donc createone. S'il y a un fuseau horaire, nous avons terminé. Sinon, créez une chaîne de fuseau horaire local en utilisant le format + hh: mm (plus accepté que + hhmm).