Comment convertir une chaîne en date / heure avec la spécification de format en JavaScript?

StackOverflow https://stackoverflow.com/questions/476105

Question

Comment convertir une chaîne en objet javascript en javascript en spécifiant une chaîne de format?

Je cherche quelque chose comme:

var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
Était-ce utile?

La solution

Je pense que cela peut vous aider: http://www.mattkruse.com/javascript/date/

Il existe une fonction getDateFromFormat () que vous pouvez modifier un peu pour résoudre votre problème.

Mise à jour: une version mise à jour des exemples est disponible à l'adresse javascripttoolbox.com .

Autres conseils

Utilisez la nouvelle date ( dateString ) si votre chaîne est compatible avec Date.parse () . Si votre format est incompatible (je pense que c'est le cas), vous devez analyser la chaîne vous-même (cela devrait être facile avec des expressions régulières) et créer un nouvel objet Date avec des valeurs explicites pour l'année, le mois, la date, l'heure, les minutes et les secondes.

@Christoph Mentionne l'utilisation d'une expression rationnelle pour résoudre le problème. Voici ce que j'utilise:

var dateString = "2010-08-09 01:02:03";
var reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/;
var dateArray = reggie.exec(dateString); 
var dateObject = new Date(
    (+dateArray[1]),
    (+dateArray[2])-1, // Careful, month starts at 0!
    (+dateArray[3]),
    (+dateArray[4]),
    (+dateArray[5]),
    (+dateArray[6])
);

Ce n’est nullement intelligent, configurez simplement l’expression rationnelle et la nouvelle date (blah) selon vos besoins.

Edit: Peut-être un peu plus compréhensible dans ES6 en utilisant la déstructuration:

let dateString = "2010-08-09 01:02:03"
  , reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2})/
  , [, year, month, day, hours, minutes, seconds] = reggie.exec(dateString)
  , dateObject = new Date(year, month-1, day, hours, minutes, seconds);

Mais en toute honnêteté, j’atteins quelque chose comme Moment

Aucune routine de formatage sophistiquée pour la date / l'heure n'existe en JavaScript.

Vous devrez utiliser une bibliothèque externe pour la sortie de la date au format, " Format de date JavaScript " ; de Flagrant Badassery semble très prometteur.

Pour la conversion d'entrée, plusieurs suggestions ont déjà été faites. :)

Découvrez Moment.js . C’est une bibliothèque moderne et puissante qui compense les fonctions lamentables de JavaScript Date (ou son absence).

Juste pour une réponse mise à jour ici, il existe une bonne librairie js à l'adresse http://www.datejs.com/

  

Datejs est une bibliothèque de dates JavaScript open source pour l'analyse, le formatage et le traitement.

var temp1 = "";
var temp2 = "";

var str1 = fd; 
var str2 = td;

var dt1  = str1.substring(0,2);
var dt2  = str2.substring(0,2);

var mon1 = str1.substring(3,5);
var mon2 = str2.substring(3,5);

var yr1  = str1.substring(6,10);  
var yr2  = str2.substring(6,10); 

temp1 = mon1 + "/" + dt1 + "/" + yr1;
temp2 = mon2 + "/" + dt2 + "/" + yr2;

var cfd = Date.parse(temp1);
var ctd = Date.parse(temp2);

var date1 = new Date(cfd); 
var date2 = new Date(ctd);

if(date1 > date2) { 
    alert("FROM DATE SHOULD BE MORE THAN TO DATE");
}

La bibliothèque externe est une surcharge pour l'analyse d'une ou deux dates. J'ai donc créé ma propre fonction à l'aide de Oli's et Les solutions de Christoph . Ici en Europe centrale, nous utilisons rarement n'importe quoi sauf le format du PO, cela devrait donc suffire pour les applications simples utilisées ici.

function ParseDate(dateString) {
    //dd.mm.yyyy, or dd.mm.yy
    var dateArr = dateString.split(".");
    if (dateArr.length == 1) {
        return null;    //wrong format
    }
    //parse time after the year - separated by space
    var spacePos = dateArr[2].indexOf(" ");
    if(spacePos > 1) {
        var timeString = dateArr[2].substr(spacePos + 1);
        var timeArr = timeString.split(":");
        dateArr[2] = dateArr[2].substr(0, spacePos);
        if (timeArr.length == 2) {
            //minutes only
            return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]));
        } else {
            //including seconds
            return new Date(parseInt(dateArr[2]), parseInt(dateArr[1]-1), parseInt(dateArr[0]), parseInt(timeArr[0]), parseInt(timeArr[1]), parseInt(timeArr[2]))
        }
    } else {
        //gotcha at months - January is at 0, not 1 as one would expect
        return new Date(parseInt(dateArr[2]), parseInt(dateArr[1] - 1), parseInt(dateArr[0]));
    }
}

Date.parse () est assez intelligent mais je ne peux pas garantir que le format sera analysé correctement.

Si ce n’est pas le cas, il vous faudra trouver un moyen de concilier les deux. Votre exemple est assez simple (il ne s’agit que de chiffres) et une touche de REGEX (ou même de string.split () - peut-être plus rapide) associée à du code parseInt () vous permet de prendre rapidement rendez-vous.

time = "2017-01-18T17:02:09.000+05:30"

t = new Date(time)

hr = ("0" + t.getHours()).slice(-2);
min = ("0" + t.getMinutes()).slice(-2);
sec = ("0" + t.getSeconds()).slice(-2);

t.getFullYear()+"-"+t.getMonth()+1+"-"+t.getDate()+" "+hr+":"+min+":"+sec

Juste pour donner mes 5 centimes.

Mon format de date est jj.mm.yyyy (format britannique) et aucun des exemples ci-dessus ne fonctionnait pour moi. Tous les analyseurs considéraient mm comme jour et jj comme mois.

J'ai trouvé cette bibliothèque: http : //joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ et cela a fonctionné, car vous pouvez dire l'ordre des champs comme ceci:

>>console.log(new Date(Date.fromString('09.05.2012', {order: 'DMY'})));
Wed May 09 2012 00:00:00 GMT+0300 (EEST)

J'espère que cela aide quelqu'un.

Moment.js se chargera de cela:

var momentDate = moment('23.11.2009 12:34:56', 'DD.MM.YYYY HH:mm:ss');
var date = momentDate.;

Pour satisfaire pleinement la chaîne Date.parse , convertie au format jj-mm-AAAA comme spécifié dans le RFC822, si vous utilisez l'analyse aaaa-mm-jj, vous risquez de commettre une erreur.

//Here pdate is the string date time
var date1=GetDate(pdate);
    function GetDate(a){
        var dateString = a.substr(6);
        var currentTime = new Date(parseInt(dateString ));
        var month =("0"+ (currentTime.getMonth() + 1)).slice(-2);
        var day =("0"+ currentTime.getDate()).slice(-2);
        var year = currentTime.getFullYear();
        var date = day + "/" + month + "/" + year;
        return date;
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top