Conversion D'une chaîne de caractères en une date en JavaScript

Comment puis-je convertir une chaîne de caractères en date en JavaScript?

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

var dt_st= //st in date format same as dt
448
demandé sur DavidRR 2011-04-11 13:21:18

29 réponses

le meilleur format de chaîne pour l'analyse des chaînes est le format date ISO avec le JavaScript Date object constructor.

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

mais attendez! le simple fait d'utiliser le" format ISO " ne fonctionne pas de manière fiable. Les chaînes de caractères sont parfois interprétées comme UTC et parfois comme localtime (basé sur le fournisseur du navigateur et la version). La meilleure pratique devrait toujours être de stocker les dates comme UTC et faire des calculs comme UTC.

pour séparer une date en tant que UTC, ajouter un Z - par exemple: new Date('2011-04-11T10:20:30Z') .

pour afficher une date en TUC, utilisez .toUTCString() ,

pour afficher une date à l'heure locale de l'utilisateur, utilisez .toString() .

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

pour ancienne compatibilité Internet Explorer (C'est à dire que les versions de moins de 9 ne supportent pas le format ISO dans le constructeur de Date), vous devez diviser la représentation de chaîne datetime en ses parties et ensuite vous pouvez utiliser le constructeur en utilisant des parties datetime, par exemple: new Date('2011', '04' - 1, '11', '11', '51', '00') . Notez que le nombre du mois doit être 1 de moins.


autre méthode - utiliser une bibliothèque appropriée:

, Vous pouvez également profiter de la bibliothèque Moment.js cela permet d'analyser la date avec le fuseau horaire spécifié.

579
répondu Pavel Hodek 2017-05-23 12:34:51

malheureusement j'ai découvert que

var mydate = new Date('2014-04-03');
console.log(mydate.toDateString());

retourne "Mer Avr 02 2014". Je sais que ça a l'air fou, mais ça arrive à certains utilisateurs.

la bulletproof solution est la suivante:

var parts ='2014-04-03'.split('-');
// Please pay attention to the month (parts[1]); JavaScript counts months from 0:
// January - 0, February - 1, etc.
var mydate = new Date(parts[0], parts[1] - 1, parts[2]); 
console.log(mydate.toDateString());
176
répondu Roman Podlinov 2018-01-17 15:25:10
var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'--'));

et la sortie sera:

dt => Date {Fri Apr 26 2013}
98
répondu serega386 2014-04-04 05:20:53
function stringToDate(_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;
}

stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")
65
répondu Kassem 2014-09-21 17:28:21

Passer en argument à Jour():

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

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

24
répondu oblig 2011-04-11 09:26:13

new Date(2000, 10, 1) will give you" Wed Nov 01 2000 00:00:00 GMT+0100 (CET)"

voir que 0 pour le mois vous donne janvier

17
répondu noiv 2011-04-11 09:25:53

si vous pouvez utiliser la formidable bibliothèque moment (par exemple dans un noeud.js project) vous pouvez facilement analyser votre date en utilisant par exemple

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

et peut accéder à L'objet date JS via

momentDate ().toDate();
17
répondu High6 2014-09-22 09:08:52

moment.js ( ) http://momentjs.com / ) est un paquet complet et bon pour les dates d'utilisation et les supports chaînes ISO 8601 .

vous pouvez ajouter la date de chaîne et le format.

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 documentation http://momentjs.com/docs/#/parsing/string-format /

recommandation: je recommande l'utilisation d'un paquet pour les dates qui contient beaucoup de formats, parce que le fuseau horaire et le format gestion du temps est vraiment un gros problème, moment js résoudre beaucoup de formats. Vous pourriez analyser facilement une date à partir d'une simple chaîne de date mais je pense que c'est un travail acharné pour prendre en charge tous les formats et les variations de dates.

13
répondu Juan Caicedo 2018-08-24 16:21:27

pour ceux qui sont à la recherche d'une solution minuscule et intelligente:

String.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");
11
répondu Arivan Bastos 2016-07-26 17:05:30

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 = stringDate.match(pattern);
var dt = new Date(arrayDate[3], arrayDate[2] - 1, arrayDate[1]);

cette solution fonctionne dans les versions IE inférieures à 9.

10
répondu Alex N. 2016-04-29 02:03:55

les Horodatages doit être castée pour un certain Nombre de

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
10
répondu Lucky Soni 2016-08-21 15:42:34

Date.parse vous donne presque ce que vous voulez. Il s'étouffe sur la partie am / pm , mais avec un peu de 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;
}
9
répondu niksvp 2011-04-11 09:30:42

consultez la bibliothèque de données http://www.datejs.com/

6
répondu z33m 2011-04-11 09:22:54

Juste new Date(st);

en supposant que c'est le bon format.

5
répondu Mark Kahn 2011-04-11 09:23:08

conversion au format pt-BR:

    var dateString = "13/10/2014";
    var dataSplit = dateString.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!!!

4
répondu Marcelo Rebouças 2014-11-13 18:11:09

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. Ceci vous retournera un objet Date. https://jsfiddle.net/Sushil231088/q56yd0rp /

"17/9/2014".toDate("dd/MM/yyyy", "/")
4
répondu Sushil Mahajan 2016-06-23 14:18:48

pour convertir la chaîne de caractères en date dans 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
3
répondu Alexey Popov 2015-08-16 13:17:47

encore une autre façon de le faire:

String.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
2
répondu Mackraken 2017-02-03 05:11:48

j'ai fait cette fonction pour convertir n'importe quel objet Date en objet Date UTC.

function dateToUTC(date) {
    return new Date(date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate(), date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds());
}


dateToUTC(new Date());
2
répondu Andrew Anthony Gerst 2017-03-07 23:24:29
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 fonctionne pas dans FireFox, Afin de mieux utiliser "/" au lieu de "-" dans la chaîne de format de date.

1
répondu Ravi 2015-03-17 11:20:53

si vous devez vérifier le contenu de la chaîne de caractères 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; 
}
1
répondu Adriano P 2015-12-13 03:49:49

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";
}
1
répondu Kurenai Kunai 2016-05-26 16:56:12

ISO 8601-esque les flux de données, aussi excellents que la norme est, ne sont pas encore largement soutenus.

c'est une excellente ressource pour comprendre quel format de datestring vous devez utiliser:

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

Oui, cela signifie que votre datestring pourrait être aussi simple que contrairement à

"2014/10/13 23:57:52" plutôt "2014-10-13 23:57:52"

0
répondu taveras 2014-10-14 02:28:30
                //little bit of code for Converting dates 

                var dat1 = document.getElementById('inputDate').value;
                var date1 = new Date(dat1)//converts string to date object
                alert(date1);
                var dat2 = document.getElementById('inputFinishDate').value;
                var date2 = new Date(dat2)
                alert(date2);
0
répondu Pec1983 2015-05-12 14:34:20

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;

}

0
répondu Fetra 2018-02-01 06:26:31

j'ai créé la fonction parseDateTime pour convertir la chaîne de caractères à date objet et il fonctionne dans tous les navigateurs (y compris IE navigateur), vérifier si quelqu'un a besoin, référence https://github.com/Umesh-Markande/Parse-String-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 e.x ( 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 e.x ( 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 e.x ( 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)
0
répondu Umesh Markande 2018-07-26 15:35:32

vous pouvez utiliser regex pour analyser la chaîne de caractères pour détailler l'heure puis créer la date ou n'importe quel format de retour comme:

//example : let dateString = "2018-08-17 01:02:03.4"

function strToDate(dateString){
    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(dateString)
  , dateObject = new Date(year, month-1, day, hours, minutes, seconds, miliseconds);
  return dateObject;
}
alert(strToDate(dateString));
0
répondu TungHarry 2018-08-17 04:28:37

utilisez ce format....

//get current date in javascript

  var currentDate=New Date();


// for getting a date from a textbox as string format

   var newDate=document.getElementById("<%=textBox1.ClientID%>").value;

// convert this date to date time

   var MyDate=New Date(newDate);
-3
répondu Jeetendra singh negi 2014-09-30 15:47:18

vous pouvez aussi faire: madate.toLocaleDateString ();

-3
répondu Avishai 2015-03-25 21:14:50