Frage

Wie kann ich eine Zeichenfolge in ein Datum Zeit Objekt in Javascript, indem Sie ein Format-String-Format konvertieren?

Ich bin auf der Suche nach so etwas wie:

var dateTime = convertToDateTime("23.11.2009 12:34:56", "dd.MM.yyyy HH:mm:ss");
War es hilfreich?

Lösung

Ich denke, das kann Ihnen helfen: http://www.mattkruse.com/javascript/date/

Es gibt eine getDateFromFormat() Funktion, die Sie ein wenig zwicken können Ihr Problem zu lösen.

Update: Es gibt eine aktualisierte Version der Proben finden Sie unter javascripttoolbox.com

Andere Tipps

Verwenden Sie new Date(dateString) wenn die Zeichenfolge kompatibel ist mit Date.parse() . Wenn Ihr Format nicht kompatibel ist (ich glaube, es ist), müssen Sie die Zeichenfolge selbst analysiert werden (müssen mit regulären Ausdrücken einfach sein) und erstellen Sie ein neues Date-Objekt mit expliziten Werten für Jahr, Monat, Tag, Stunde, Minute und Sekunde.

@ Christoph Mentions einen regulären Ausdruck mit dem Problem zu begegnen. Hier ist, was ich verwende:

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

Es ist keineswegs intelligent, konfigurieren nur die Regex und new Date(blah) an Ihre Bedürfnisse anpassen.

Edit: Vielleicht ein bisschen mehr verständlich in ES6 mit Destrukturierung:

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

Aber in aller Ehrlichkeit in diesen Tagen erreiche ich für so etwas Moment

Kein anspruchsvolles Datum / Zeit-Formatierung Routinen existieren in JavaScript.

Sie haben eine externe Bibliothek für formatierte Datum Ausgabe verwenden, „JavaScript-Date-Format“ von Flagrant Badassery sieht sehr vielversprechend aus.

Für die Umwandlung der Eingabe werden mehrere Vorschläge bereits gemacht worden. :)

Schauen Sie sich Moment.js . Es ist eine moderne und leistungsfähige Bibliothek, die für JavaScript ist woeful Datumsfunktionen macht (oder deren Fehlen).

Nur für eine aktualisierte Antwort hier, es gibt einen guten js lib unter http://www.datejs.com/

  

Datejs ist eine Open-Source-JavaScript-Date-Bibliothek für das Parsen, Formatierung und Verarbeitung.

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

Externe Bibliothek ist ein Overkill für das Parsen von einem oder zwei Tagen, so habe ich meine eigene Funktion Oli und Christoph Lösungen. Hier in Mitteleuropa haben wir selten aything verwenden, aber das Format einer OP, so sollte dies hier für einfache Anwendungen verwendet genug sein.

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() ziemlich intelligent ist, aber ich kann das Format nicht garantieren, analysiert korrekt wird.

Wenn dies nicht der Fall, würden Sie etwas finden, um die beiden zu überbrücken. Ihr Beispiel ist ziemlich einfach (als rein Zahlen) so ein Hauch von REGEX (oder string.split() sogar - vielleicht schneller sein). Gepaart mit einigen parseInt() ermöglichen es Ihnen, schnell auf ein Datum machen

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

Nur meinen 5 Cent geben.

Mein Datumsformat TT.MM.JJJJ (UK-Format) und keine der obigen Beispiele wurden für mich zu arbeiten. Alle Parser wurden unter Berücksichtigung mm als Tag und dd als Monat.

Ich habe diese Bibliothek gefunden: http : //joey.mazzarelli.com/2008/11/25/easy-date-parsing-with-javascript/ und es hat funktioniert, weil Sie die Reihenfolge der Felder wie folgt sagen kann:

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

Ich hoffe, das hilft jemand.

Moment.js wird damit umgehen:

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

Um die Date.parse voll zu erfüllen konvertieren Zeichenfolge dd-mm-YYYY formatiert werden, wie in RFC822 angegeben, wenn Sie yyyy-mm-dd verwenden Parse kann einen Fehler tun.

//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;
    }
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top