Oto scenariusz:
Mam String
inny format daty i inny. Np .:
data: 2016-10-19
dateFormat: „DD-MM-RRRR”.
Muszę sprawdzić, czy ta data jest prawidłowa.
Próbowałem następujących rzeczy
var d = moment("2016-10-19",dateFormat);
d.isValid()
powraca za false
każdym razem. Czy Moment.js nie analizuje daty w podanym formacie?
Następnie próbowałem DD-MM-YYYY
najpierw sformatować datę, a następnie przekazać ją do Moment.js:
var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);
Teraz date.isValid()
daje mi pożądany efekt, ale tutaj obiekt daty Moment.js jest tworzony dwukrotnie. Jak mogę tego uniknąć? Czy jest lepsze rozwiązanie?
FYI, nie wolno mi zmieniać dateFormat
.
javascript
date
datetime
momentjs
Ganesh
źródło
źródło
Odpowiedzi:
Był w stanie znaleźć rozwiązanie. Ponieważ data, którą otrzymuję, jest w formacie ISO, tylko podanie daty do chwili ją zweryfikuje, nie ma potrzeby przekazywania dateFormat.
A następnie
date.isValid()
daje pożądany efekt.źródło
var a = moment('12345'); a.isValid() // is true
To się nie udaje, ponieważ moment wróci do domyślnego obiektu daty, jeśli nie może przeanalizować daty. A domyślny obiekt daty zawsze zwróci datę (ale nie taką, którą chcesz).moment('02').isValid() === true
, więc możesz być ostrożnymoment('abcde 1').isValid() === true
var date = moment('2016-10-19', 'DD-MM-YYYY', true);
Podczas wywoływania należy dodać trzeci argument,
moment
który wymusza ścisłe analizowanie. Oto odpowiednia część aktualnej dokumentacji http://momentjs.com/docs/#/parsing/string-format/ Jest blisko końca tej sekcji.źródło
Proszę bardzo: Working Fidddle
źródło
2016-10-19
?var d = moment("2016-10-19",dateFormat);
?Używam moment wraz z nową datą do obsługi przypadków
undefined
wartości danych:const date = moment(new Date("2016-10-19"));
z powodu:
moment(undefined).isValid() == true
gdzie jako lepszy sposób:
moment(new Date(undefined)).isValid() == false
źródło
Właśnie znalazłem naprawdę pokręconą sprawę.
źródło
moment('Decimal128', 'YYYY-MM-DD', true).isValid() // false
. Użyj trybu ścisłego :) momentjs.com/guides/#/parsing/strict-modeJak sprawdzić, czy ciąg jest prawidłową datą za pomocą Moment, gdy data i format daty są różne
Przepraszam, ale czy któreś z podanych rozwiązań w tym wątku faktycznie odpowiadało na zadane pytanie?
Poniższe działa dla mnie ...
Ale szczerze, nie rozumiem dlaczego
moment.isDate()
( zgodnie z dokumentacją ) akceptuje tylko przedmiot. Moim zdaniem powinien również obsługiwać string.źródło
źródło
Jeśli data jest prawidłowa, to
getTime()
będzie zawsze sobie równa.źródło
Spróbuj tego. To nie jest miłe, ale będzie działać, o ile dane wejściowe mają stały format z selektora dat.
W tym przykładzie jest zła data pochodząca z twojego selektora
https://jsfiddle.net/xs8tvox9/
źródło