Analysieren Sie die DateTime-Zeichenfolge in JavaScript

93

Weiß jemand, wie man Datumszeichenfolgen im erforderlichen Format analysiert dd.mm.yyyy?

Azat
quelle
Möchten Sie ein neues Datumsobjekt aus einer Zeichenfolge in diesem Format erstellen?
Kieran Hall

Antworten:

140

Sehen:

Code:

var strDate = "03.09.1979";
var dateParts = strDate.split(".");

var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
Jonathan Fingland
quelle
8
Hoppla ... ein bisschen boo-boo - der Datumskonstruktor sieht tatsächlich so aus: neues Datum (Jahr, Monat, Datum [, Stunde, Minute, Sekunde, Millisekunde]), sodass Sie die Reihenfolge der dateParts im Konstruktor ändern müssen.
Salman A
6
Noch ein Boo-Boo. Der JavaScript-Datumskonstruktor ist seltsam im Umgang mit Monaten. 0 bedeutet Januar, 1 Februar usw. Die Zeile im obigen Code sollte folgendermaßen aussehen: var date = new Date (dateParts [2], dateParts [1] - 1, dateParts [0]);
Elias Zamaria
1
@ Mikez302, du hast recht. Die verknüpfte MDC-Referenz weist ebenfalls darauf hin. Code behoben
Jonathan Fingland
mmm, aber wie kann man überprüfen, ob strDate einen ungültigen Wert wie "30.30.2000" hat?
Dr. Nr.
2
@ user674887, Sie können die Werte nach dem Parsen vergleichen. zB dateParts [1] -1 == date.getMonth ()
Jonathan Fingland
51

Wenn Sie die jQuery-Benutzeroberfläche verwenden, können Sie jedes Datum formatieren mit:

<html>
    <body>
        Your date formated: <span id="date1"></span><br/>
    </body>
</html>

 

var myDate = '30.11.2011';
var parsedDate = $.datepicker.parseDate('dd.mm.yy', myDate);

$('#date1').text($.datepicker.formatDate('M d, yy', parsedDate));

http://jsfiddle.net/mescalito2345/ND2Qg/14/

Mecalito
quelle
21
+1 Ich sehe nicht, dass JavaScript und JQuery eine häufige Kombination sind.
DJNA
Eine Antwort sollte nicht auf einer Bibliothek beruhen, die nicht markiert oder im OP erwähnt wird. Die Verwendung von jQuery als Datumsbibliothek ist ein gewaltiger Overkill, wenn eine dreizeilige Funktion denselben Job ausführen kann.
RobG
9

Wir verwenden diesen Code, um zu überprüfen, ob die Zeichenfolge ein gültiges Datum ist

var dt = new Date(txtDate.value)
if (isNaN(dt))
Adriaan Stander
quelle
Das angegebene Format stimmt nicht mit dem von developer.mozilla.org/en/Core_JavaScript_1.5_Reference/… geforderten Format überein (und daher reicht dieser Date-Konstruktor nicht aus)
Jonathan Fingland,
Das testet überhaupt nicht auf gültige Daten, sondern nur, ob der Datumskonstruktor aus der Eingabe ein gültiges Datum erstellen kann. Die beiden sind nicht dasselbe.
RobG
6

Refs: http://momentjs.com/docs/#/parsing/string/

Wenn Sie moment.js verwenden, können Sie den Modus "Zeichenfolge" + "Format" verwenden

moment(String, String);
moment(String, String, String);
moment(String, String, Boolean);
moment(String, String, String, Boolean);

Ex:

moment("12-25-1995", "MM-DD-YYYY");
Bienenstock
quelle
2
In den meisten Fällen ist MomentJS ein Overkill, da für die Verwendung von reinem JavaScript nur Hunderte von Bytes erforderlich sind, während MomentJS 12,4 KB komprimiert ist. Praktisch für Entwickler, verlangsamt aber die Website. Lohnt sich nicht.
Raptor
3

Ich habe folgenden Code im IE verwendet. (IE8 kompatibel)

var dString = "2013.2.4";
var myDate = new Date( dString.replace(/(\d+)\.(\d+)\.(\d+)/,"$2/$3/$1") );
alert( "my date:"+ myDate );
user3444722
quelle
2

ASP.NET-Entwickler haben die Wahl zwischen diesem praktischen integrierten Gerät (MS JS muss auf der Seite enthalten sein):

var date = Date.parseLocale('20-Mar-2012', 'dd-MMM-yyyy');

http://msdn.microsoft.com/en-us/library/bb397521%28v=vs.100%29.aspx

Matthew Millman
quelle
OP erwähnt nicht, dass er ASP.NET
Raptor
2

Datumsobjekt verwenden:

var time = Date.parse('02.02.1999');
document.writeln(time);

Geben Sie: 917902800000

HotJard
quelle
16
new Date(Date.parse('02.02.1999'))
Duke
+1 Für Herzog Kommentare zu new Date(Date.parse('02.02.1999'))Javascript
Jack
Gibt NaN in mindestens zwei aktuellen Browsern zurück. Siehe Warum liefert Date.parse falsche Ergebnisse?
RobG
@ Duke - new Date(Date.parse('02.02.1999'))führt zu identischen Ergebnissen wie new Date('02.02.1999'), einschließlich ungültigem Datum in einigen Browsern. Die Verwendung des integrierten Parsers ist wohl die schlechteste Methode, um einen Zeitstempel zu analysieren.
RobG
2

Diese Funktion behandelt auch das ungültige Datum 29.2.2001.

function parseDate(str) {
    var dateParts = str.split(".");
    if (dateParts.length != 3)
        return null;
    var year = dateParts[2];
    var month = dateParts[1];
    var day = dateParts[0];

    if (isNaN(day) || isNaN(month) || isNaN(year))
        return null;

    var result = new Date(year, (month - 1), day);
    if (result == null)
        return null;
    if (result.getDate() != day)
        return null;
    if (result.getMonth() != (month - 1))
        return null;
    if (result.getFullYear() != year)
        return null;

    return result;
}
Martin Staufcik
quelle
0

Sie können das Datum formatieren, indem Sie nur diesen Codetyp erstellen. In Javascript.

 // for eg.
              var inputdate=document.getElementById("getdate").value);
                 var datecomp= inputdate.split('.');

                Var Date= new Date(datecomp[2], datecomp[1]-1, datecomp[0]); 
                 //new date( Year,Month,Date)
Bachas
quelle
Sie sollten Javascript verwenden, nicht JQuery, da es kein JQuery-Tag gibt
Sagar
glücklich ... bedeutet, nur das Senario zu verstehen
Bachas
Gut. Ich glaube nicht, dass Ihr Beispiel anders ist als das von Martin Staufcik. Tatsächlich hat seine Antwort eine zusätzliche Logik, um ungültige Daten zu behandeln.
Sagar
Martin Staufcik behandelt die Bedingungen, die im Allgemeinen nicht auftreten. Kannst du mir einen Kalender geben, der ungültig machen kann? Warum sollten wir so langen Code schreiben, wenn wir es kurz haben? Es wäre mir viel besser, wenn Martin Staufcik auch geben würde, um das Datum mit der Zeit zu behandeln.
Bachas