Como posso converter uma string para uma data em JavaScript?
var st = "date in some format"
var dt = new date();
var dt_st= //st in date format same as dt
javascript
date
type-conversion
date-parsing
jslearner
fonte
fonte
Date -> String
ouString -> Date
?Respostas:
O melhor formato de sequência para análise de sequência é o formato ISO da data junto com o construtor do objeto Data JavaScript.
Exemplos de formato ISO:
YYYY-MM-DD
ouYYYY-MM-DDTHH:MM:SS
.Mas espere! O simples uso do "formato ISO" não funciona por si só de maneira confiável. Às vezes, as cadeias de caracteres são analisadas como UTC e outras como horário local (com base no fornecedor e na versão do navegador). A melhor prática deve sempre ser armazenar datas como UTC e fazer cálculos como UTC.
Para analisar uma data como UTC, anexar um Z - por exemplo:
new Date('2011-04-11T10:20:30Z')
.Para exibir uma data no UTC, use
.toUTCString()
,para exibir uma data na hora local do usuário, use
.toString()
.Mais informações sobre MDN | Data e esta resposta .
Para compatibilidade Internet idade Explorer (versões do IE inferior a 9 não suporta o formato ISO no construtor Data), você deve dividir datetime representação de cadeia para as suas partes e, em seguida, você pode usar construtor usando data e hora peças, por exemplo:
new Date('2011', '04' - 1, '11', '11', '51', '00')
. Observe que o número do mês deve ser 1 a menos.Método alternativo - use uma biblioteca apropriada:
Você também pode aproveitar a biblioteca Moment.js que permite analisar a data com o fuso horário especificado.
fonte
new Date('2011-04-11T11:51:00')
a data criada é válida.new Date('1970-30-02')
é uma data inválida porque não há 30 meses em um ano. Você não pode transbordar meses, mas quando transborda dias, ele resolve em Chrome e Firefox para uma data válida:new Date('1970-02-30')
é o mesmo dia da nova data ('1970-03-02').Infelizmente eu descobri que
retorna "quarta-feira, 02 de abril de 2014". Eu sei que parece loucura, mas acontece para alguns usuários.
A solução à prova de balas é a seguinte:
fonte
yyyy-MM-dd
são analisadas como UTC e toString retorna a hora local, portanto, dependendo do fuso horário do usuário, pode definitivamente retornar resultados diferentes. Se sempre quiser a hora como UTC, use toUTCString .E a saída será:
fonte
fonte
.indexOf()
método, pois ele não é compatível com vários navegadores sem polyfils. Em vez disso, use os métodos JS mais compatíveis.match()
ou.test()
vanilla JS.var _delimiter = _format.match(/\W/g)[0];
no início da função, você pode obter o delimitador automaticamente e pré-selecionar o terceiro parâmetro.O moment.js ( http://momentjs.com/ ) é um pacote completo e bom para datas de uso e suporta strings ISO 8601 .
Você pode adicionar uma data e formato de string.
E você pode verificar se uma data é válida.
Alguns exemplos de exibição
Consulte a documentação http://momentjs.com/docs/#/parsing/string-format/
fonte
let dt = moment("02-01-2019", "MM-DD-YYYY");console.log(dt.fromNow()+' | '+dt.format('LL'))
: "há 3 meses | 1 de fevereiro de 2019"Passe como argumento para Date ():
Você pode acessar a data, mês, ano, utilizando, por exemplo:
dt.getMonth()
.fonte
console.log(new Date('30-08-2018'))
e obter data inválida01/02/2020
no meu computador (no Reino Unido), ele retornará em 1º de fevereiro, onde, como se a mesma coisa fosse feita nos EUA, retornaria em 2 de janeiro. Você nunca deve usar essa implementação ingênua. Use o momento .Se você pode usar a fantástica biblioteca de momentos (por exemplo, em um projeto Node.js.), pode facilmente analisar sua data usando, por exemplo,
e pode acessar o objeto de data JS via
fonte
new Date(2000, 10, 1)
você receberá "Wed 01 de novembro de 2000 00:00:00 GMT + 0100 (CET)"Veja que 0 por mês fornece janeiro
fonte
Para quem procura uma solução pequena e inteligente:
Exemplo:
fonte
Somente
new Date(st);
Supondo que seja o formato adequado .
fonte
Se você deseja converter do formato "dd / MM / aaaa". Aqui está um exemplo:
Esta solução funciona nas versões do IE inferiores a 9.
fonte
Os carimbos de data e hora devem ser convertidos em um número
fonte
undefined
valor? Comovar date = new Date(undefined)
:?Date.parse
quase consegue o que você quer. Ele engasga com a parteam
/pm
, mas com alguns hackers você pode fazê-lo funcionar:fonte
Converta para o formato pt-BR:
Espero ajudar alguém !!!
fonte
Eu criei um violino para isso, você pode usar a função toDate () em qualquer sequência de datas e fornecer o formato da data. Isso retornará um objeto Date. https://jsfiddle.net/Sushil231088/q56yd0rp/
fonte
Para converter string para data em js, eu uso
http://momentjs.com/
fonte
Eu criei essa função para converter qualquer objeto Date em um objeto Date UTC.
fonte
Ainda outra maneira de fazer isso:
fonte
Você pode tentar isso:
fonte
ou
a string de data no formato '01 -01-1970 'não funcionará no FireFox; portanto, use "/" em vez de "-" na string de formato de data.
fonte
Se você precisar verificar o conteúdo da sequência antes de converter para o formato Data:
fonte
Eu criei a função parseDateTime para converter a string em objeto de data e ela está funcionando em todos os navegadores (incluindo o navegador IE), verifique se alguém é necessário, consulte https://github.com/Umesh-Markande/Parse-String-to-Date -em-todo-navegador
fonte
Esta resposta é baseada na resposta de Kassem, mas também lida com anos de dois dígitos. Enviei uma edição à resposta de Kassem, mas, caso não tenha sido aprovada, também a envio como resposta separada.
fonte
Você pode usar regex para analisar a seqüência de caracteres para detalhar a hora e criar a data ou qualquer formato de retorno como:
fonte
atuação
Hoje (20.05.2018) realizo testes para soluções escolhidas - para dois casos: a data de entrada é a sequência ISO8601 (anúncio, CD, CD, Dd, Ed) e a data de entrada é o carimbo de data / hora (At, Ct, Dt). As soluções Bd, Cd, Ct não retornam o objeto js Date como resultados, mas eu as adiciono porque podem ser úteis, mas não as comparo com soluções válidas. Esses resultados podem ser úteis para a análise massiva de datas.
Conclusões
new Date
(anúncio) é 50-100x mais rápida que moment.js (dd) para todos os navegadores para data e carimbo de data / hora ISOnew Date
(anúncio) é ~ 10x mais rápida queparseDate
(Ed)Date.parse
(Bd) é mais rápida se precisarmos obter o carimbo de data e hora da data ISO em todos os navegadoresDetalhes
Realizo teste no MacOs High Sierra 10.13.6 no Chrome 81.0, Safari 13.1, Firefox 75.0. Solução
parseDate
(Ed) usenew Date(0)
e defina manualmente os componentes da data UTC.Mostrar snippet de código
Resultados para chrome
fonte
As cadeias de dados ISO 8601-esque, tão excelentes quanto o padrão, ainda não são amplamente suportadas.
Este é um ótimo recurso para descobrir qual formato de cadeia de dados você deve usar:
http://dygraphs.com/date-formats.html
Sim, isso significa que sua cadeia de dados pode ser tão simples quanto oposta a
"2014/10/13 23:57:52"
ao invés de"2014-10-13 23:57:52"
fonte
fonte
use este código: (meu problema foi resolvido com este código)
}
fonte
Eu escrevi uma função reutilizável que eu uso quando recebo seqüências de datas do servidor.
você pode passar o delimitador desejado (/ - etc.) que separa o dia mês e ano para usar o
split()
método.você pode ver e testá-lo neste exemplo de trabalho .
fonte
Ainda outra maneira de fazer isso é criar uma regex com grupos de captura nomeados sobre a cadeia de caracteres de formato e, em seguida, usar essa regex para extrair o dia, mês e ano da cadeia de datas:
fonte