Een tekenreeks converteren naar een datum in JavaScript

Hoe kan ik een tekenreeks in JavaScript naar een datum converteren?

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

Antwoord 1, autoriteit 100%

De beste tekenreeksindeling voor het ontleden van tekenreeksen is de ISO-datumnotatie samen met de JavaScript-objectconstructor Date.

Voorbeelden van ISO-formaat: YYYY-MM-DDof YYYY-MM-DDTHH:MM:SS.

Maar wacht!Alleen het gebruik van het “ISO-formaat” werkt op zichzelf niet betrouwbaar. Tekenreeksen worden soms geparseerd als UTC en soms als lokale tijd (op basis van browserleverancier en -versie). De beste praktijk zou altijd moeten zijn om datums op te slaan als UTC en berekeningen te maken als UTC.

Als u een datum wilt ontleden als UTC, voegt u een Ztoe, bijvoorbeeld: new Date('2011-04-11T10:20:30Z').

Als u een datum in UTC wilt weergeven, gebruikt u .toUTCString(),
gebruik .toString()om een datum in de lokale tijd van de gebruiker weer te geven.

Meer informatie over MDN | Datumen dit antwoord.

Voor oude compatibiliteit met Internet Explorer (IE-versies minder dan 9 ondersteunen geen ISO-indeling in Date-constructor), moet u datetime-tekenreeksrepresentatie naar zijn onderdelen splitsen en dan kunt u constructor gebruiken met datetime-onderdelen, bijvoorbeeld: new Date('2011', '04' - 1, '11', '11', '51', '00'). Merk op dat het nummer van de maand 1 minder moet zijn.


Alternatieve methode – gebruik een geschikte bibliotheek:

U kunt ook profiteren van de bibliotheek moment.js waarmee parsing-datum met de opgegeven tijdzone mogelijk is.


Antwoord 2, Autoriteit 37%

Helaas kwam ik erachter dat

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

Antwoord 3, Autoriteit 15%

var st = "26.04.2013";
var pattern = /(\d{2})\.(\d{2})\.(\d{4})/;
var dt = new Date(st.replace(pattern,'$3-$2-$1'));

en de uitvoer is:

dt => Date {Fri Apr 26 2013}

Antwoord 4, Autoriteit 9%

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","-")

Antwoord 5, Autoriteit 5%

moment.js (http://momentjs.com/ ) is een compleet en goed pakket voor gebruik datums en Ondersteunt ISO 8601 strings .

U kunt een stringdatum en -formaat toevoegen.

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

en u kunt controleren of een datum geldig is.

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

Sommige Toon voorbeelden

let dt = moment("02-01-2019", "MM-DD-YYYY");
console.log(dt.fromNow()+' |'+dt.format('LL')) 
// output: "3 months ago | February 1, 2019"

Zie documentatie
http://momentjs.com/docs/#/parsing/string-format/

Aanbeveling: Ik raad aan om een ​​pakket te gebruiken voor data die veel formaten bevat, omdat het tijdzone- en formaattijdmanagement echt een groot probleem is, het moment dat JS veel formaten oplost. Je zou gemakkelijk kunnen worden gevolgd van een eenvoudige string tot nu toe, maar ik denk dat dat een harde werk is om alle indelingen en variaties van datums te ondersteunen.


Antwoord 6, Autoriteit 4%

Geef het als een argument tot nu toe ():

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

U hebt toegang tot de datum, maand, jaar met behulp van, bijvoorbeeld: dt.getMonth().


Antwoord 7, Autoriteit 3%

Als je de geweldige moment-bibliotheek kunt gebruiken (bijvoorbeeld in een Node.js-project), kun je je datum gemakkelijk ontleden met behulp van bijvoorbeeld

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

en heeft toegang tot het JS-datumobject via

momentDate ().toDate();

Antwoord 8, autoriteit 3%

Voor degenen die op zoek zijn naar een kleine en slimme oplossing:

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);
};

Voorbeeld:

"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");

Antwoord 9, autoriteit 2%

Gewoon new Date(st);

Ervan uitgaande dat dit de juiste indelingis.


Antwoord 10, autoriteit 2%

new Date(2000, 10, 1)geeft u “Wed Nov 01 2000 00:00:00 GMT+0100 (CET)”

Zie dat 0 voor de maand je januari geeft


Antwoord 11

Als u wilt converteren van het formaat “dd/MM/jjjj”. Hier is een voorbeeld:

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]);

Deze oplossing werkt in IE-versies van minder dan 9.


Antwoord 12

Tijdstempels moeten naar een nummer worden gegoten

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

Antwoord 13

Date.parsegeeft je bijna wat je wilt. Het verslikt zich in het gedeelte am/pm, maar met wat hacken kun je het aan het werk krijgen:

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;
}

Antwoord 14

Converteren naar formaat 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]);
    }

Ik hoop dat ik iemand kan helpen!!!


Antwoord 15

Voor het converteren van string tot nu toe in js gebruik ik 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

Antwoord 16

Ik heb hiervoor een viool gemaakt, je kunt de functie toDate() op elke datumstring gebruiken en het datumformaat opgeven. Hiermee krijgt u een Date-object terug.
https://jsfiddle.net/Sushil231088/q56yd0rp/

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

Antwoord 17

Dit antwoord is gebaseerd op het antwoordvan Kassem, maar het gaat ook om jaren met twee cijfers. Ik heb een bewerking van het antwoord van Kassem ingediend, maar voor het geval het niet is goedgekeurd, dien ik dit ook in als een afzonderlijk antwoord.

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 year = parseInt(dateItems[yearIndex]); 
        // adjust for 2 digit year
        if (year < 100) { year += 2000; }
        var month=parseInt(dateItems[monthIndex]);
        month-=1;
        var formatedDate = new Date(year,month,dateItems[dayIndex]);
        return formatedDate;
}
stringToDate("17/9/14","dd/MM/yyyy","/");
stringToDate("17/9/2014","dd/MM/yyyy","/");
stringToDate("9/17/2014","mm/dd/yyyy","/")
stringToDate("9-17-2014","mm-dd-yyyy","-")

Antwoord 18

Prestaties

Vandaag (2020.05.08) voer ik tests uit voor gekozen oplossingen – voor twee gevallen: invoerdatum is ISO8601-tekenreeks (Ad,Bd,Cd,Dd,Ed) en invoerdatum is tijdstempel(At, Ct, Dt). Oplossingen Bd,Cd,Ct retourneren js Date-object niet als resultaten, maar ik voeg ze toe omdat ze nuttig kunnen zijn, maar ik vergelijk ze niet met geldige oplossingen. Deze resultaten kunnen handig zijn voor het massaal ontleden van datums.

Conclusies

  • Oplossing new Date(advertentie) is 50-100x sneller dan moment.js (Dd) voor alle browsers voor ISO-datum en tijdstempel
  • Oplossing new Date(ad) is ~ 10x sneller dan parseDate(ed)
  • Oplossing Date.parse(BD) is snelst als Wee tijdstempel moet krijgen van ISO-date in alle browsers

Details

Ik voer de test op MacOS High Sierra 10.13.6 op Chrome 81.0, Safari 13.1, Firefox 75.0. Oplossing parseDate(ED) Gebruik new Date(0)en stel handmatig UTC-datumcomponenten in.


Antwoord 19

Ik heb deze functie gemaakt om elk datumobject te converteren naar een UTC-datumobject.

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

Antwoord 20

U kunt dit proberen:

function formatDate(userDOB) {
  const dob = new Date(userDOB);
  const monthNames = [
    'January', 'February', 'March', 'April', 'May', 'June', 'July',
     'August', 'September', 'October', 'November', 'December'
  ];
  const day = dob.getDate();
  const monthIndex = dob.getMonth();
  const year = dob.getFullYear();
  // return day + ' ' + monthNames[monthIndex] + ' ' + year;
  return `${day} ${monthNames[monthIndex]} ${year}`;
}
console.log(formatDate('1982-08-10'));

Antwoord 21

Nog een andere manier om het te doen:

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

Antwoord 22

var date = new Date(year, month, day);

of

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

datumtekenreeks in formaat ’01-01-1970′ werkt niet in FireFox, dus gebruik beter “/” in plaats van “-” in tekenreeks voor datumformaat.


Antwoord 23

Als u de inhoud van de tekenreeks moet controleren voordat u deze omzet naar de datumnotatie:

// 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; 
}

Antwoord 24

Ik heb Parrsedatetime-functie gemaakt om het tekenreeks naar datum te converteren en het werkt in alle browser (inclusief IE-browser), controleer of iemand nodig heeft
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)

Antwoord 25

Je kunt regex gebruiken om de tekenreeks te ontleden om de tijd te detailleren en vervolgens een datum of een ander retourformaat maken zoals:

//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));

Antwoord 26

ISO 8601-achtige datumstrings, hoe uitstekend de standaard ook is, worden nog steeds niet breed ondersteund.

Dit is een geweldige bron om erachter te komen welk datumstringformaat je moet gebruiken:

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

Ja, dat betekent dat je datestring zo simpel kan zijn als in tegenstelling tot

"2014/10/13 23:57:52"
in plaats van
"2014-10-13 23:57:52"


Antwoord 27

               //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);

Antwoord 28

gebruik deze code: (mijn probleem is opgelost met deze 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;

}


Antwoord 29

Ik heb een herbruikbare functie geschreven die ik gebruik wanneer ik datumreeksen van de server ontvang.
u kunt het gewenste scheidingsteken ( / – etc..) doorgeven dat de dag, maand en jaar scheidt om de split()-methode te gebruiken.
je kunt zien & test het op dit werkvoorbeeld.

<!DOCTYPE html>
<html>
  <head>
    <style>
    </style>
  </head>
  <body>
    <div>
      <span>day:
      </span> 
      <span id='day'>
      </span>
    </div>
    <div>
      <span>month:
      </span> 
      <span id='month'>
      </span>
    </div>
    <div>
      <span>year:
      </span> 
      <span id='year'>
      </span>
    </div>
    <br/>
    <input type="button" id="" value="convert" onClick="convert('/','28/10/1980')"/>
    <span>28/10/1980
    </span>
    <script>
      function convert(delimiter,dateString)
      {
        var splitted = dateString.split('/');
        // create a new date from the splitted string 
        var myDate = new Date(splitted[2],splitted[1],splitted[0]);
        // now you can access the Date and use its methods 
        document.getElementById('day').innerHTML = myDate.getDate();
        document.getElementById('month').innerHTML = myDate.getMonth();
        document.getElementById('year').innerHTML = myDate.getFullYear();
      }
    </script>
  </body>
</html>

Antwoord 30

Nog een andere manier om dit te doen is door een regex te bouwen met benoemde capture-groepen over de format string en dan die regex te gebruiken om de dag, maand en jaar uit de date string te halen:

function parseDate(dateStr, format) {
  const regex = format.toLocaleLowerCase()
    .replace(/\bd+\b/, '(?<day>\\d+)')
    .replace(/\bm+\b/, '(?<month>\\d+)')
    .replace(/\by+\b/, '(?<year>\\d+)')
  const parts = new RegExp(regex).exec(dateStr) || {};
  const { year, month, day } = parts.groups || {};
  return parts.length === 4 ? new Date(year, month-1, day) : undefined;
}
const printDate = x => console.log(x ? x.toLocaleDateString() : x);
printDate(parseDate('05/11/1896', 'dd/mm/YYYY'));
printDate(parseDate('07-12-2000', 'dd-mm-yy'));
printDate(parseDate('07:12:2000', 'dd:mm:yy'));
printDate(parseDate('2017/6/3', 'yy/MM/dd'));
printDate(parseDate('2017-6-15', 'y-m-d'));
printDate(parseDate('2015 6 25', 'y m d'));
printDate(parseDate('2015625', 'y m d')); // bad format

Other episodes