web-dev-qa-db-fra.com

Comment créer un objet de date à partir de chaîne en javascript

Avoir 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? */

?

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

comme les mois sont indexés de 0 à js.

225
Dogbert

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

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

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

La syntaxe est la suivante:

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

alors

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

est correct; jour, heure, minute, seconde, milliseconde sont facultatifs.

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

52
Christopher Tokar

Il existe plusieurs méthodes de création de 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 e.g. / 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;
}
51
Mayank

Très simple:

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

La date doit être au format ISO aaaa/mm/jj.

28
Pearl

Commencez par extraire la chaîne comme ceci

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

Ensuite,

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

Toujours, pour toute question concernant la spécification JavaScript dans la pratique, je recommanderai vivement les Réseau de développeurs Mozilla , et leur référence JavaScript .

Comme il est indiqué dans le sujet de l'objet Date à propos de la variante d'argument que vous utilisez:

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

Et à propos du paramètre mois:

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

Clairement, vous devriez utiliser le mois numéro 10 pour novembre.

P.S .: La raison pour laquelle je recommande le MDN est l’exactitude, une bonne explication des choses, des exemples et un tableau de compatibilité de navigateur.

7
Sune Rasmussen

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

Je préfère laisser Javascript faire le gros du travail en ce qui concerne l’analyse des dates. Cependant, il serait bien de traiter le problème du fuseau horaire local de manière assez transparente. En gardant ces deux choses à l’esprit, voici une fonction pour le faire avec le statu quo actuel - et quand Javascript changera, cela fonctionnera encore mais pourra être supprimé (avec un peu de temps pour 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; alors créez-en un. S'il y a un fuseau horaire, nous avons terminé. Sinon, créez une chaîne de fuseau horaire locale en utilisant le format + hh: mm (plus accepté que + hhmm).

1
Gerard ONeill