it-swarm.com.de

Konvertieren einer Zeichenfolge in ein Datum in JavaScript

Wie kann ich eine Zeichenfolge in JavaScript in ein Datum konvertieren?

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

var dt_st= //st in date format same as dt
484
jslearner

Das beste Zeichenfolgenformat für das Parsen von Zeichenfolgen ist das Datums-ISO-Format zusammen mit dem JavaScript-Date-Objektkonstruktor.

Beispiele für das ISO-Format: YYYY-MM-DD oder YYYY-MM-DDTHH:MM:SS.

Aber warte! Die Verwendung des "ISO-Formats" allein funktioniert nicht zuverlässig. Zeichenfolgen werden manchmal als UTC und manchmal als Ortszeit analysiert (basierend auf dem Hersteller und der Version des Browsers). Die beste Vorgehensweise sollte immer darin bestehen, Datumsangaben als UTC zu speichern und Berechnungen als UTC durchzuführen.

Um ein Datum als UTC zu analysieren, hängen Sie ein Z - z. B .: new Date('2011-04-11T10:20:30Z') an.

Um ein Datum in UTC anzuzeigen, verwenden Sie .toUTCString(),
Um ein Datum in der Ortszeit des Benutzers anzuzeigen, verwenden Sie .toString().

Weitere Informationen zu MDN | Datum und diese Antwort .

Aus Gründen der Kompatibilität mit Internet Explorer (IE-Versionen unter 9 unterstützen das ISO-Format im Date-Konstruktor nicht) sollten Sie die Darstellung von Datums- und Uhrzeitzeichenfolgen in Teile aufteilen und dann den Konstruktor mit Datums- und Uhrzeitteilen verwenden, z. B .: new Date('2011', '04' - 1, '11', '11', '51', '00'). Beachten Sie, dass die Nummer des Monats 1 weniger sein muss.


Alternative Methode - Verwenden Sie eine geeignete Bibliothek:

Sie können auch die Bibliothek Moment.js verwenden, mit der das Datum mit der angegebenen Zeitzone analysiert werden kann.

717
Pavel Hodek

Leider habe ich das herausgefunden 

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

gibt "Mi Apr 02 2014" zurück. Ich weiß, dass es verrückt klingt, aber es passiert für einige Benutzer. 

Die kugelsichere Lösung ist die folgende:

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

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

Und die Ausgabe wird sein:

dt => Date {Fri Apr 26 2013}
103
serega386
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","-")
70
Kassem

Übergeben Sie es als Argument an Date ():

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

Sie können auf das Datum, den Monat und das Jahr zugreifen, z. B. mit: dt.getMonth().

28
oblig

moment.js ( http://momentjs.com/ ) ist ein komplettes und gutes Paket für Nutzungsdaten und unterstützt ISO 8601-Zeichenketten .

Sie können String Datum und Format hinzufügen.

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

Und Sie können prüfen, ob ein Datum gültig ist.

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

Siehe Dokumentation http://momentjs.com/docs/#/parsing/string-format/

Empfehlung: Ich empfehle die Verwendung eines Pakets für Datumsangaben, das viele Formate enthält, da die Zeitzonen- und Formatzeitverwaltung wirklich ein großes Problem darstellt, sobald js viele Formate löst. Sie könnten problemlos aus einer einfachen Zeichenfolge bis zum Datum datieren, aber ich denke, es ist eine harte Arbeit, alle Formate und Variationen der Datumsangaben zu unterstützen.

18
Juan Caicedo

new Date(2000, 10, 1) gibt Ihnen "Mi Nov 01 2000 00:00:00 GMT + 0100 (CET)" 

Sehen Sie, dass 0 für Monat Ihnen Januar gibt

17
Torsten Becker

Wenn Sie die fantastische moment library (z. B. in einem Node.js-Projekt) verwenden können, können Sie Ihr Datum problemlos analysieren, z.

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

und kann über das JS-Date-Objekt zugreifen

momentDate ().toDate();
17
H6.

Zeitstempel sollten in eine Zahl umgewandelt werden

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
11
Lucky Soni

Für diejenigen, die eine winzige und intelligente Lösung suchen:

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

Beispiel:

"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
Arivan Bastos

Wenn Sie aus dem Format "TT/MM/JJJJ" konvertieren möchten. Hier ist ein Beispiel:

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

Diese Lösung funktioniert in IE Versionen unter 9.

10
Alex N.

Date.parse bekommt Sie fast, was Sie wollen. Der Part am/pm wird verschluckt, aber mit etwas Hacken können Sie es zum Laufen bringen:

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
niksvp

check out datejs library http://www.datejs.com/

6
z33m

Nur new Date(st);

Angenommen, es ist das richtige Format.

6
Mark Kahn

Konvertieren Sie in das 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]);
    }

Ich hoffe jemandem helfen !!!

4

Ich habe dafür eine Geige erstellt. Sie können die toDate () - Funktion für eine beliebige Datumszeichenfolge verwenden und das Datumsformat angeben. Daraufhin wird ein Date-Objekt zurückgegeben . https://jsfiddle.net/Sushil231088/q56yd0rp/

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

Für die Konvertierung von String in js verwende ich 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
Alexey Popov

Ich habe diese Funktion erstellt, um ein beliebiges Date-Objekt in ein UTC-Date-Objekt zu konvertieren.

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


dateToUTC(new Date());
2
Andy

Noch eine andere Möglichkeit:

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
Mackraken

Wenn Sie den Inhalt der Zeichenfolge überprüfen müssen, bevor Sie in das Datumsformat konvertieren:

// 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
Adriano P

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
Kurenai Kunai

Sie können dies versuchen:

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

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

oder 

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

datumszeichenfolge im Format '01 -01-1970 'funktioniert nicht in FireFox. Verwenden Sie daher besser "/" anstelle von "-" in Datumsformatzeichenfolge.

1
Ravi

Ich habe eine wiederverwendbare Funktion geschrieben, die ich verwende, wenn ich Datumsfolgen vom Server erhalte.
Sie können Ihr gewünschtes Trennzeichen (/ - etc ..) übergeben, das Tag, Monat und Jahr voneinander trennt, um die split()-Methode zu verwenden.
Sie können es an diesem Arbeitsbeispiel sehen und testen.

<!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>
1
jonathana

Sie können Regex verwenden, um die Zeichenfolge zu analysieren, um die Zeit anzugeben, und dann ein Datum oder ein beliebiges Rückgabeformat zu erstellen:

//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
TungHarry

Ich habe die parseDateTime-Funktion erstellt, um die Zeichenfolge in ein Datumsobjekt zu konvertieren. Sie funktioniert in allen Browsern (einschließlich IE Browser)). Überprüfen Sie, ob jemand erforderlich ist. Referenz https: // github. de/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
Umesh Markande

Eine weitere Möglichkeit besteht darin, einen regulären Ausdruck mit benannten Erfassungsgruppen über der Formatzeichenfolge zu erstellen und diesen regulären Ausdruck dann zum Extrahieren von Tag, Monat und Jahr aus der Datumszeichenfolge zu verwenden:

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
0
jo_va

verwenden Sie diesen Code: (Mein Problem wurde mit diesem Code gelöst) 

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
Fetra
                //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
Pec1983

ISO 8601-artige Datenstrings, so hervorragend der Standard ist, werden noch nicht umfassend unterstützt. 

Dies ist eine großartige Ressource, um herauszufinden, welches Format der Datenzeichenfolge Sie verwenden sollten: 

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

Ja, das bedeutet, dass Ihre Datenkette so einfach sein kann wie keine 

"2014/10/13 23:57:52" anstelle von "2014-10-13 23:57:52"

0
taveras