Przeanalizuj ciąg DateTime w JavaScript


Odpowiedzi:


140

Widzieć:

Kod:

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

var date = new Date(dateParts[2], (dateParts[1] - 1), dateParts[0]);

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/


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

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

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


2

Użyj obiektu Date:

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

Podaj: 917902800000


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

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)

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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.