Conversion d’une chaîne en date en JavaScript

Comment puis-je convertir une chaîne à une date en JavaScript?

var st = "date in some format" var dt = new date(); var dt_st= //st in date format same as dt 

    Le meilleur format de chaîne pour l’parsing de chaîne est le format ISO de date avec le constructeur d’object JavaScript Date.

    Exemples de format ISO: YYYY-MM-DD ou YYYY-MM-DDTHH:MM:SS .

    Mais attendez! L’utilisation du “format ISO” ne fonctionne pas de manière fiable. Les chaînes sont parfois analysées en UTC et parfois en heure locale (en fonction du fournisseur et de la version du navigateur). La meilleure pratique devrait toujours être de stocker les dates au format UTC et d’effectuer des calculs au format UTC.

    Pour parsingr une date en UTC, ajoutez un Z – par exemple: new Date('2011-04-11T10:20:30Z') .

    Pour afficher une date en UTC, utilisez .toUTCSsortingng() ,
    pour afficher une date dans l’heure locale de l’utilisateur, utilisez .toSsortingng() .

    Plus d’infos sur MDN | Date et cette réponse .

    Pour l’ancienne compatibilité d’Internet Explorer (les versions IE inférieures à 9 ne prennent pas en charge le format ISO dans le constructeur Date), vous devez diviser la représentation de la chaîne datetime en ses parties, puis utiliser un constructeur utilisant des parties datetime, par exemple: new Date('2011', '04' - 1, '11', '11', '51', '00') . Notez que le numéro du mois doit être inférieur à 1.


    Autre méthode – utilisez une bibliothèque appropriée:

    Vous pouvez également tirer parti de la bibliothèque Moment.js qui permet l’parsing de la date avec le fuseau horaire spécifié.

    Malheureusement j’ai découvert que

     var mydate = new Date('2014-04-03'); console.log(mydate.toDateSsortingng()); 
     var st = "26.04.2013"; var pattern = /(\d{2})\.(\d{2})\.(\d{4})/; var dt = new Date(st.replace(pattern,'$3-$2-$1')); 

    Et le résultat sera:

     dt => Date {Fri Apr 26 2013} 
     function ssortingngToDate(_date,_format,_delimiter) { var formatLowerCase=_format.toLowerCase(); var formatItems=formatLowerCase.split(_delimiter); var dateItems=_date.split(_delimiter); var monthIndex=formatItems.indexOf("mm"); var dayIndex=formatItems.indexOf("dd"); var yearIndex=formatItems.indexOf("yyyy"); var month=parseInt(dateItems[monthIndex]); month-=1; var formatedDate = new Date(dateItems[yearIndex],month,dateItems[dayIndex]); return formatedDate; } ssortingngToDate("17/9/2014","dd/MM/yyyy","/"); ssortingngToDate("9/17/2014","mm/dd/yyyy","/") ssortingngToDate("9-17-2014","mm-dd-yyyy","-") 

    Passez-le en argument à Date ():

     var st = "date in some format" var dt = new Date(st); 

    Vous pouvez accéder à la date, au mois et à l’année en utilisant, par exemple: dt.getMonth() .

    new Date(2000, 10, 1) vous donnera “mer nov 01 2000 00:00:00 GMT + 0100 (CET)”

    Voir que 0 pour le mois vous donne janvier

    Si vous pouvez utiliser la bibliothèque de moments géniale (par exemple dans un projet Node.js), vous pouvez facilement parsingr votre date en utilisant par exemple

     var momentDate = moment("2014-09-15 09:00:00"); 

    et peut accéder à l’object date JS via

     momentDate ().toDate(); 

    moment.js ( http://momentjs.com/ ) est un package complet et performant pour les dates d’utilisation et supporte les chaînes ISO 8601 .

    Vous pouvez append une date et un format de chaîne.

     moment("12-25-1995", "MM-DD-YYYY"); 

    Et vous pouvez vérifier si la date est valide.

     moment("not a real date").isValid(); //Returns false 

    Voir la documentation http://momentjs.com/docs/#/parsing/ssortingng-format/

    Recommandation: je recommande d’utiliser un paquet pour les dates contenant beaucoup de formats, car la gestion du temps et du format du fuseau horaire est vraiment un gros problème, le moment js résout beaucoup de formats. Vous pouvez facilement parsingr une date à partir d’une simple chaîne à ce jour mais je pense que c’est un travail difficile pour supporter tous les formats et les variations de dates.

    Pour ceux qui recherchent une solution minuscule et intelligente:

     Ssortingng.prototype.toDate = function(format) { var normalized = this.replace(/[^a-zA-Z0-9]/g, '-'); var normalizedFormat= format.toLowerCase().replace(/[^a-zA-Z0-9]/g, '-'); var formatItems = normalizedFormat.split('-'); var dateItems = normalized.split('-'); var monthIndex = formatItems.indexOf("mm"); var dayIndex = formatItems.indexOf("dd"); var yearIndex = formatItems.indexOf("yyyy"); var hourIndex = formatItems.indexOf("hh"); var minutesIndex = formatItems.indexOf("ii"); var secondsIndex = formatItems.indexOf("ss"); var today = new Date(); var year = yearIndex>-1 ? dateItems[yearIndex] : today.getFullYear(); var month = monthIndex>-1 ? dateItems[monthIndex]-1 : today.getMonth()-1; var day = dayIndex>-1 ? dateItems[dayIndex] : today.getDate(); var hour = hourIndex>-1 ? dateItems[hourIndex] : today.getHours(); var minute = minutesIndex>-1 ? dateItems[minutesIndex] : today.getMinutes(); var second = secondsIndex>-1 ? dateItems[secondsIndex] : today.getSeconds(); return new Date(year,month,day,hour,minute,second); }; 

    Exemple:

     "22/03/2016 14:03:01".toDate("dd/mm/yyyy hh:ii:ss"); "2016-03-29 18:30:00".toDate("yyyy-mm-dd hh:ii:ss"); 

    Si vous souhaitez convertir à partir du format “jj / MM / aaaa”. Voici un exemple:

     var pattern = /^(\d{1,2})\/(\d{1,2})\/(\d{4})$/; var arrayDate = ssortingngDate.match(pattern); var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]); 

    Cette solution fonctionne dans les versions d’IE inférieures à 9.

    Les horodatages doivent être envoyés à un numéro

     var ts = '1471793029764'; ts = Number(ts); // cast it to a Number var date = new Date(ts); // works var invalidDate = new Date('1471793029764'); // does not work. Invalid Date 

    Date.parse vous procure presque ce que vous voulez. Il étouffe dans la partie am / pm , mais avec du piratage, vous pouvez le faire fonctionner:

     var str = 'Sun Apr 25, 2010 3:30pm', timestamp; timestamp = Date.parse(str.replace(/[ap]m$/i, '')); if(str.match(/pm$/i) >= 0) { timestamp += 12 * 60 * 60 * 1000; } 

    consultez la bibliothèque datejs http://www.datejs.com/

    Juste new Date(st);

    En supposant que c’est le bon format.

    Convertir au format pt-BR:

      var dateSsortingng = "13/10/2014"; var dataSplit = dateSsortingng.split('/'); var dateConverted; if (dataSplit[2].split(" ").length > 1) { var hora = dataSplit[2].split(" ")[1].split(':'); dataSplit[2] = dataSplit[2].split(" ")[0]; dateConverted = new Date(dataSplit[2], dataSplit[1]-1, dataSplit[0], hora[0], hora[1]); } else { dateConverted = new Date(dataSplit[2], dataSplit[1] - 1, dataSplit[0]); } 

    J’espère aider quelqu’un !!!

    J’ai créé un violon pour cela, vous pouvez utiliser la fonction toDate () sur n’importe quelle chaîne de date et fournir le format de date. Cela vous renverra un object Date. https://jsfiddle.net/Sushil231088/q56yd0rp/

     "17/9/2014".toDate("dd/MM/yyyy", "/") 

    Pour la chaîne de conversion à ce jour en js j’utilise http://momentjs.com/

     moment().format('MMMM Do YYYY, h:mm:ss a'); // August 16th 2015, 4:17:24 pm moment().format('dddd'); // Sunday moment().format("MMM Do YY"); // Aug 16th 15 moment().format('YYYY [escaped] YYYY'); // 2015 escaped 2015 moment("20111031", "YYYYMMDD").fromNow(); // 4 years ago moment("20120620", "YYYYMMDD").fromNow(); // 3 years ago moment().startOf('day').fromNow(); // 16 hours ago moment().endOf('day').fromNow(); // in 8 hours 

    Encore une autre façon de le faire:

     Ssortingng.prototype.toDate = function(format) { format = format || "dmy"; var separator = this.match(/[^0-9]/)[0]; var components = this.split(separator); var day, month, year; for (var key in format) { var fmt_value = format[key]; var value = components[key]; switch (fmt_value) { case "d": day = parseInt(value); break; case "m": month = parseInt(value)-1; break; case "y": year = parseInt(value); } } return new Date(year, month, day); }; a = "3/2/2017"; console.log(a.toDate("dmy")); // Date 2017-02-03T00:00:00.000Z 

    J’ai fait cette fonction pour convertir n’importe quel object Date en un object Date UTC.

     function dateToUTC(date) { return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()); } dateToUTC(new Date()); 
     var date = new Date(year, month, day); 

    ou

     var date = new Date('01/01/1970'); 

    chaîne de date au format ’01 -01-1970 ‘ne fonctionnera pas dans FireFox, donc mieux vaut utiliser “/” au lieu de “-” dans la chaîne de format de date.

    Si vous devez vérifier le contenu de la chaîne avant de convertir au format Date:

     // Convert 'M/D/YY' to Date() mdyToDate = function(mdy) { var d = mdy.split(/[\/\-\.]/, 3); if (d.length != 3) return null; // Check if date is valid var mon = parseInt(d[0]), day = parseInt(d[1]), year= parseInt(d[2]); if (d[2].length == 2) year += 2000; if (day <= 31 && mon <= 12 && year >= 2015) return new Date(year, mon - 1, day); return null; } 
     var a = "13:15" var b = toDate(a, "h:m") alert(b); function toDate(dStr, format) { var now = new Date(); if (format == "h:m") { now.setHours(dStr.substr(0, dStr.indexOf(":"))); now.setMinutes(dStr.substr(dStr.indexOf(":") + 1)); now.setSeconds(0); return now; } else return "Invalid Format"; } 

    Les datacenters ISO 8601, aussi excellents que le standard, ne sont toujours pas largement pris en charge.

    C’est une excellente ressource pour savoir quel format de chaîne de données vous devez utiliser:

    http://dygraphs.com/date-formats.html

    Oui, cela signifie que votre datessortingng pourrait être aussi simple que

    "2014/10/13 23:57:52" au lieu de "2014-10-13 23:57:52"

      //little bit of code for Converting dates var dat1 = document.getElementById('inputDate').value; var date1 = new Date(dat1)//converts ssortingng to date object alert(date1); var dat2 = document.getElementById('inputFinishDate').value; var date2 = new Date(dat2) alert(date2); 

    utilisez ce code: (mon problème a été résolu avec ce code)

     function dateDiff(date1, date2){ var diff = {} // Initialisation du retour var tmp = date2 - date1; tmp = Math.floor(tmp/1000); // Nombre de secondes entre les 2 dates diff.sec = tmp % 60; // Extraction du nombre de secondes tmp = Math.floor((tmp-diff.sec)/60); // Nombre de minutes (partie entière) diff.min = tmp % 60; // Extraction du nombre de minutes tmp = Math.floor((tmp-diff.min)/60); // Nombre d'heures (entières) diff.hour = tmp % 24; // Extraction du nombre d'heures tmp = Math.floor((tmp-diff.hour)/24); // Nombre de jours restants diff.day = tmp; return diff; 

    }

    J’ai créé la fonction parseDateTime pour convertir la chaîne en object de date et elle fonctionne dans tous les navigateurs (y compris le navigateur IE), vérifiez si quelqu’un le souhaite, référence https://github.com/Umesh-Markande/Parse-Ssortingng-to-Date -in-all-browser

      function parseDateTime(datetime) { var monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; if(datetime.split(' ').length == 3){ var date = datetime.split(' ')[0]; var time = datetime.split(' ')[1].replace('.00',''); var timearray = time.split(':'); var hours = parseInt(time.split(':')[0]); var format = datetime.split(' ')[2]; var bits = date.split(/\D/); date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits ex ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/ var day = date.getDate(); var monthIndex = date.getMonth(); var year = date.getFullYear(); if ((format === 'PM' || format === 'pm') && hours !== 12) { hours += 12; try{ time = hours+':'+timearray[1]+':'+timearray[2] }catch(e){ time = hours+':'+timearray[1] } } var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + ' ' + year + ' ' + time); return formateddatetime; }else if(datetime.split(' ').length == 2){ var date = datetime.split(' ')[0]; var time = datetime.split(' ')[1]; var bits = date.split(/\D/); var datetimevalue = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits ex ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/ var day = datetimevalue.getDate(); var monthIndex = datetimevalue.getMonth(); var year = datetimevalue.getFullYear(); var formateddatetime = new Date(monthNames[monthIndex] + ' ' + day + ' ' + year + ' ' + time); return formateddatetime; }else if(datetime != ''){ var bits = datetime.split(/\D/); var date = new Date(bits[0], --bits[1], bits[2]); /* if you change format of datetime which is passed to this function, you need to change bits ex ( bits[0], bits[1], bits[2 ]) position as per date, months and year it represent bits array.*/ return date; } return datetime; } var date1 = '2018-05-14 05:04:22 AM'; // yyyy-mm-dd hh:mm:ss A var date2 = '2018/05/14 05:04:22 AM'; // yyyy/mm/dd hh:mm:ss A var date3 = '2018/05/04'; // yyyy/mm/dd var date4 = '2018-05-04'; // yyyy-mm-dd var date5 = '2018-05-14 15:04:22'; // yyyy-mm-dd HH:mm:ss var date6 = '2018/05/14 14:04:22'; // yyyy/mm/dd HH:mm:ss console.log(parseDateTime(date1)) console.log(parseDateTime(date2)) console.log(parseDateTime(date3)) console.log(parseDateTime(date4)) console.log(parseDateTime(date5)) console.log(parseDateTime(date6)) **Output---** Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time) Mon May 14 2018 05:04:22 GMT+0530 (India Standard Time) Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time) Fri May 04 2018 00:00:00 GMT+0530 (India Standard Time) Mon May 14 2018 15:04:22 GMT+0530 (India Standard Time) Mon May 14 2018 14:04:22 GMT+0530 (India Standard Time) 

    Vous pouvez utiliser regex pour parsingr la chaîne pour détailler le temps, puis créer la date ou tout format de retour comme:

     //example : let dateSsortingng = "2018-08-17 01:02:03.4" function strToDate(dateSsortingng){ let reggie = /(\d{4})-(\d{2})-(\d{2}) (\d{2}):(\d{2}):(\d{2}).(\d{1})/ , [,year, month, day, hours, minutes, seconds, miliseconds] = reggie.exec(dateSsortingng) , dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds); return dateObject; } alert(strToDate(dateSsortingng)); 

    utilisez ce format ….

     //get current date in javascript var currentDate=New Date(); // for getting a date from a textbox as ssortingng format var newDate=document.getElementById("<%=textBox1.ClientID%>").value; // convert this date to date time var MyDate=New Date(newDate); 

    Vous pouvez également faire: mydate.toLocaleDateSsortingng ();