Przeanalizuj ciąg DateTime w JavaScript

94

Czy ktoś wie, jak analizować ciąg daty w wymaganym formacie dd.mm.yyyy?

Azat
źródło
Czy chcesz utworzyć nowy obiekt daty z ciągu w tym formacie?
Kieran Hall

Odpowiedzi:

140

Widzieć:

Kod:

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

var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);
Jonathan Fingland
źródło
mmm, ale jak sprawdzić, czy strDate ma nieprawidłową wartość, np. „30.30.2000”?
Dr. No
2
@ user674887, możesz porównać wartości po przeanalizowaniu. np. dateParts [1] -1 == date.getMonth ()
Jonathan Fingland
Jeśli masz obie daty TIME w następujący sposób: "2014-05-20T16: 43: 56.71-06: 00" var partesFecha = solicitud.CreatedDate.split ("T") [0] .split ("-"); var createdDate = new Date (partesFecha [0], (partesFecha [1] - 1), partesFecha [2]); Pierwsza data wyodrębnienia przed T, a później podział roku, miesiąca i dnia.
RolandoCC
nie mogę uwierzyć, że musisz użyć podziału, aby uzyskać oczekiwany format daty w javascript
Claudiu Creanga
Czy ktoś jeszcze uważa za dziwne, że artykuł referencyjny Mozilli dotyczący samego obiektu Date "Note: parsing of date strings with the Date constructor (and Date.parse, they are equivalent) is strongly discouraged due to browser differences and inconsistencies."?
NanoWizard
51

Jeśli korzystasz z interfejsu użytkownika jQuery, możesz sformatować dowolną datę za pomocą:

<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
źródło
21
+1 Nie uważam, żebym był całkowicie poza zakresem, JavaScript i JQuery to powszechna kombinacja.
djna
Odpowiedź nie powinna opierać się na bibliotece, która nie jest oznaczona ani wymieniona w OP. Używanie jQuery jako biblioteki dat jest ogromną przesadą, gdy 3-liniowa funkcja może wykonać to samo zadanie.
RobG,
9

Używamy tego kodu, aby sprawdzić, czy ciąg jest prawidłową datą

var dt = new Date(txtDate.value)
if (isNaN(dt))
Adriaan Stander
źródło
podany format nie jest zgodny z formatem wymaganym przez developer.mozilla.org/en/Core_JavaScript_1.5_Reference/… (a więc ten konstruktor Date nie wystarczy)
Jonathan Fingland
To w ogóle nie sprawdza poprawności dat, tylko sprawdza, czy konstruktor Date może ustawić prawidłową datę na podstawie danych wejściowych. To nie to samo.
RobG
6

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

Jeśli używasz momentu.js, możesz użyć trybu „string” + „format”

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

dawny:

moment("12-25-1995", "MM-DD-YYYY");
ul
źródło
2
W większości przypadków MomentJS to przesada, ponieważ używanie czystego JavaScript wymaga tylko setek bajtów, podczas gdy MomentJS jest 12,4kb spakowane gzipem. Wygodny dla programistów, ale spowalnia witrynę. Nie warto.
Raptor
3

Byłem używany zgodnie z kodem w IE. (Kompatybilny z IE8)

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

Użyj obiektu Date:

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

Podaj: 917902800000

HotJard
źródło
16
new Date(Date.parse('02.02.1999'))
Duke
+1 Dla komentarzy Duke'a dotyczących new Date(Date.parse('02.02.1999'))Javascript
Jack
Zwraca NaN w co najmniej dwóch aktualnych przeglądarkach. Zobacz Dlaczego Date.parse daje nieprawidłowe wyniki?
RobG,
@ Duke - new Date(Date.parse('02.02.1999'))da identyczne wyniki new Date('02.02.1999'), w tym Invalid Date w niektórych przeglądarkach. Korzystanie z wbudowanego analizatora składni jest prawdopodobnie najgorszym sposobem analizowania znacznika czasu.
RobG,
2

Ta funkcja obsługuje również nieprawidłową datę 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
źródło
0

możesz sformatować datę po prostu tworząc ten typ kodu w 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)
Bacha
źródło
Powinieneś używać javascript, a nie jquery, ponieważ nie ma tagu jquery
Sagar
szczęśliwy ... oznacza to po prostu zrozumieć senario
Bachas
Dobrze. Nie sądzę, żeby twój przykład był inny niż ten podany przez Martina Staufcika. W rzeczywistości jego odpowiedź ma dodatkową logikę do obsługi nieprawidłowych dat.
Sagar
Martin Staufcik radzi sobie z takimi stanami, które zwykle nie występują. czy możesz dać mi jakikolwiek kalendarz, który może spowodować unieważnienie. dlaczego powinniśmy pisać tak długi kod, skoro możemy sobie z nim poradzić w krótkim czasie Byłoby znacznie lepiej, gdyby Martin Staufcik również dał do obsługi datę z czasem do obsługi.
Bachas