Estou tentando converter uma seqüência de caracteres no formato dd-mm-aaaa em um objeto de data no JavaScript usando o seguinte:
var from = $("#datepicker").val();
var to = $("#datepickertwo").val();
var f = new Date(from);
var t = new Date(to);
("#datepicker").val()
contém uma data no formato dd-mm-aaaa. Quando faço o seguinte, recebo "Data inválida":
alert(f);
Isso é devido ao símbolo '-'? Como posso superar isso?
javascript
date
user559142
fonte
fonte
Respostas:
Dividir em "-"
Analise a string nas partes necessárias:
Use regex
Por que não usar regex?
Porque você sabe que estará trabalhando em uma corda composta de três partes, separadas por hífens.
No entanto, se você estivesse procurando a mesma sequência dentro de outra, o regex seria o caminho a seguir.
Reuso
Como você está fazendo isso mais de uma vez no seu código de exemplo e talvez em outro lugar na sua base de código, envolva-o em uma função:
Usando como:
Ou se você não se importa com o jQuery em sua função:
Usando como:
JavaScript moderno
Se você é capaz de usar JS mais moderno, a destruição de matriz também é um toque agradável:
fonte
exemplo de expressão regular:
fonte
/
é delimitador e um ano feito de 2 dígitos (ou qualquer contagem maior que 1):replace( /(\d{2})[-/](\d{2})[-/](\d+)/, "$2/$1/$3")
new Date( "23. 2. 15".replace( /(\d+)[^d]+(\d+)[^d]+(\d+)/, "$2/$1/$3") );
en.wikipedia.org/wiki/Date_format_by_countryOutra possibilidade:
Combine os dígitos e reordene-os
fonte
var date = new Date(numbers[2], numbers[1]-1, numbers[0]);
Usando moment.js exemplo:
fonte
fonte
$.datepicker.parseDate("dd-mm-yy", from);
para analisar corretamente uma data como24-01-2017
, documentação datepicker chek em api.jqueryui.com/datepickerVocê também pode escrever uma data entre parênteses do
Date()
objeto, como estes:fonte
Use este formato:
myDate = new Date('2011-01-03'); // Mon Jan 03 2011 00:00:00
fonte
parseDate
função? Essa é uma função javascript nativa?'2011-01-03'
e a hora UTC para00:00:00
. Portanto, se o fuso horário do usuário for menor que o UTC, será na véspera.No meu caso
Resultado: segunda-feira, 02 de novembro de 2015, 04:40:13 GMT + 0100 (CET), então eu uso .getTime () para trabalhar com milissegundos
fonte
A resposta aceita meio que tem um bug
Considere se o datepicker contém "77-78-7980", que obviamente não é uma data válida. Isso resultaria em:
O que provavelmente não é o resultado desejado.
A razão para isso é explicada no site MDN :
Uma maneira melhor de resolver o problema é:
Isso lhe dá a possibilidade de lidar com entradas inválidas.
Por exemplo:
fonte
Você pode usar uma biblioteca externa para ajudá-lo.
http://www.mattkruse.com/javascript/date/source.html
Consulte também: Analisar a string DateTime em JavaScript
fonte
Dê uma olhada no Datejs para todos os problemas relacionados à data mesquinha. Você também pode resolver isso pela função parseDate
fonte
Você poderia usar um Regexp.
fonte
simples assim, basta passar sua data para js Date Object
fonte
new Date('30/12/2018').toLocaleDateString()
? Isso retorna Data inválida