A seguir está o cenário:
Eu tenho uma String
data e um formato de data diferentes. Ex .
: data:
19/10/2016 dataFormato: "DD-MM-AAAA".
Preciso verificar se esta data é válida.
Eu tentei seguir as coisas
var d = moment("2016-10-19",dateFormat);
d.isValid()
está voltando false
sempre. Moment.js não analisa a data no formato fornecido?
Então tentei formatar a data DD-MM-YYYY
primeiro e depois passá-la para Moment.js:
var d = moment("2016-10-19").format(dateFormat);
var date = moment(d, dateFormat);
Agora date.isValid()
está me dando o resultado desejado, mas aqui o objeto de data Moment.js é criado duas vezes. Como posso evitar isso? Existe uma solução melhor?
Para sua informação, não estou autorizado a alterar o dateFormat
.
javascript
date
datetime
momentjs
Ganesh
fonte
fonte
Respostas:
Conseguiu encontrar a solução. Como a data que estou obtendo está no formato ISO, apenas o fornecimento de data para momento o validará, não sendo necessário passar o dateFormat.
E então
date.isValid()
dá o resultado desejado.fonte
var a = moment('12345'); a.isValid() // is true
isso falha porque o momento retornará ao objeto de data padrão se não puder analisar a data. E o objeto data padrão sempre retornará uma data (não apenas o que você quer.)moment('02').isValid() === true
, de modo que você pode querer ter cuidado com issomoment('abcde 1').isValid() === true
var date = moment('2016-10-19', 'DD-MM-YYYY', true);
Você deve adicionar um terceiro argumento ao invocar
moment
que impõe uma análise estrita. Aqui está a parte relevante do momento em que a documentação está http://momentjs.com/docs/#/parsing/string-format/ Está perto do final da seção.fonte
Aqui está: Working Fidddle
fonte
2016-10-19
?var d = moment("2016-10-19",dateFormat);
?Eu uso o momento junto com a nova Data para lidar com casos de
undefined
valores de dados:const date = moment(new Date("2016-10-19"));
por causa de:
moment(undefined).isValid() == true
onde como a melhor maneira:
moment(new Date(undefined)).isValid() == false
fonte
Acabei de encontrar um caso realmente bagunçado.
fonte
moment('Decimal128', 'YYYY-MM-DD', true).isValid() // false
. Use o modo estrito :) momentjs.com/guides/#/parsing/strict-modeComo verificar se uma sequência de caracteres é uma data válida usando Moment, quando a data e o formato da data são diferentes
Desculpe, mas alguma das soluções fornecidas neste segmento realmente respondeu à pergunta que foi feita?
O seguinte funciona para mim ...
Mas, honestamente, não entenda por que
moment.isDate()
( conforme documentado ) aceita apenas um objeto. Também deve suportar uma string na minha opinião.fonte
fonte
Se a data for válida,
getTime()
sempre será igual a si mesma.fonte
Tente este. Não é legal, mas funcionará desde que a entrada seja um formato constante do seu seletor de datas.
É badDate vindo do seu selecionador neste exemplo
https://jsfiddle.net/xs8tvox9/
fonte