Em JavaScript, como posso formatar um objeto de data para imprimir como 10-Aug-2010
?
javascript
date
date-formatting
leora
fonte
fonte
myDate.getDay()
não retorna o dia da semana, mas a localização do dia da semana relacionada à semana.myDate.getDate()
retorna o dia da semana atual .Intl.DateTimeFormat
objeto Eu descrevo isso no meu post: Post . Eu crio uma solução on-line para sua resposta porIntl.DateTimeFormat
Cheque OnlinetoLocaleDateString
Respostas:
Para formatos de data delimitados personalizados, é necessário retirar os componentes de data (ou hora) de um
DateTimeFormat
objeto (que faz parte da API de Internacionalização do ECMAScript ) e, em seguida, criar manualmente uma string com os delimitadores que você deseja.Para fazer isso, você pode usar
DateTimeFormat#formatToParts
:Você também pode retirar as partes de um
DateTimeFormat
por um usandoDateTimeFormat#format
, mas observe que ao usar esse método, em março de 2020, há um erro na implementação do ECMAScript quando se trata de zeros à esquerda em minutos e segundos (esse bug é contornado pela abordagem acima).Ao trabalhar com datas e horas, geralmente vale a pena usar uma biblioteca (por exemplo: moment.js , luxon ) por causa das muitas complexidades ocultas do campo.
Observe que a API de internacionalização do ECMAScript, usada nas soluções acima, não é suportada no IE10 ( participação de mercado global de navegador de 0,03% em fevereiro de 2020).
fonte
Date
objeto para fazer isso?Se você precisar de um pouco menos de controle sobre a formatação do que a resposta atualmente aceita,
Date#toLocaleDateString
poderá ser usada para criar renderizações específicas de localidade padrão. Os argumentoslocale
eoptions
permitem que os aplicativos especifiquem o idioma cujas convenções de formatação devem ser usadas e permitem alguma personalização da renderização.Exemplos principais de opções:
a representação do dia.
Os valores possíveis são "numérico", "2 dígitos".
a representação do dia da semana.
Os valores possíveis são "estreito", "curto", "longo".
a representação do ano.
Os valores possíveis são "numérico", "2 dígitos".
a representação do mês.
Os valores possíveis são "numérico", "2 dígitos", "estreito", "curto", "longo".
a representação da hora.
Os valores possíveis são "numérico", "2 dígitos".
Os valores possíveis são "numérico", "2 dígitos".
a representação do segundo.
Os valores possíveis são "numérico", 2 dígitos ".
Todas essas chaves são opcionais. Você pode alterar o número de valores de opções com base em seus requisitos, e isso também refletirá a presença de cada período de data e hora.
Nota: Se você deseja apenas configurar as opções de conteúdo, mas ainda usar o código do idioma atual, a passagem
null
para o primeiro parâmetro causará um erro. Use emundefined
vez disso.Para diferentes idiomas:
Você pode usar mais opções de idioma.
Por exemplo
Você também pode usar o
toLocaleString()
método para a mesma finalidade. A única diferença é que essa função fornece o horário em que você não passa nenhuma opção.Referências:
toLocaleString()
toLocaleDateString()
fonte
moment.js
para um formato simples. Felizmente, fiz uma pesquisa extra no google e descobri que já existe uma API nativa. Salva uma dependência externa. Impressionante!undefined
como o primeiro parâmetro de localidade parecer arbitrário, você poderá passar o valor"default"
para utilizar as configurações de localidade do navegador, de acordo com os documentos MDN developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/…date.toLocaleDateString("en-US", { day: 'numeric' }) + "-"+ date.toLocaleDateString("en-US", { month: 'short' }) + "-" + date.toLocaleDateString("en-US", { year: 'numeric' })
deve dar #16-Nov-2019
Use a biblioteca date.format :
retorna:
dateformat on npm
http://jsfiddle.net/phZr7/1/
fonte
require is not defined
Se você precisar formatar rapidamente sua data usando plain JavaScript, utilização
getDate
,getMonth + 1
,getFullYear
,getHours
egetMinutes
:Ou, se você precisar que seja preenchido com zeros:
fonte
toLocaleDateString()
possível formatar a data usando nomes de mês / dia localizadas..toString().padStart(2, '0')
("000" + d.getFullYear()).slice(-4)
String.padStart()
está disponível apenas no ECMAScript 2017.Bem, o que eu queria era converter a data de hoje em uma string de data amigável do MySQL como 23/06/2012, e usar essa string como parâmetro em uma das minhas consultas. A solução simples que encontrei é esta:
Lembre-se de que a solução acima não leva em consideração o deslocamento do fuso horário.
Você pode considerar usar esta função:
Isso fornecerá a data correta, caso você esteja executando esse código no início / fim do dia.
fonte
new Date(date + " UTC")
para enganar o fuso horário e eliminar a linha setMinutes. Cara, o javascript está sujovar today = new Date().toISOString().slice(0,-14)
:)new Date().toISOString().split('T')[0]
new Date().toISOString().slice(0, 16).replace('T',' ')
para incluir o tempoFunção de formatação personalizada:
Para formatos fixos, uma função simples faz o trabalho. O exemplo a seguir gera o formato internacional AAAA-MM-DD:
O formato OP pode ser gerado como:
Nota: No entanto, geralmente não é uma boa ideia estender as bibliotecas padrão do JavaScript (por exemplo, adicionando esta função ao protótipo de Data).
Uma função mais avançada pode gerar uma saída configurável com base em um parâmetro de formato.
Se a gravação de uma função de formatação for muito longa, há muitas bibliotecas em torno delas. Algumas outras respostas já as enumeram. Mas o aumento de dependências também tem sua contrapartida.
Funções de formatação padrão do ECMAScript:
Desde versões mais recentes do ECMAScript, a
Date
classe possui algumas funções de formatação específicas:Nota: é possível gerar uma saída personalizada com a formatação>
Exemplos de trechos:
fonte
new Date().toLocaleDateString()
dá-lhemm/dd/yyyy
nãodd/mm/yyyy
por favor corrija esse.Se você já estiver usando a interface do usuário do jQuery em seu projeto, poderá fazê-lo desta maneira:
Algumas opções de formato de data para escolher estão disponíveis aqui .
fonte
Eu acho que você pode simplesmente usar o método Date não padrão
toLocaleFormat(formatString)
formatString: uma string de formato no mesmo formato esperado pela
strftime()
função em C.Referências:
fonte
JavaScript simples é a melhor opção para iniciantes pequenos.
Por outro lado, se você precisar de mais informações sobre datas, MomentJS é uma ótima solução.
Por exemplo:
fonte
YYYY
menos que você saiba a diferença entreYYYY
eyyyy
: stackoverflow.com/questions/15133549/…YYYY
(nãoyyyy
) é o ano padrão eGGGG
(nãoYYYY
) é o ano ISO com base na semana.Nos navegadores modernos (*) , você pode fazer isso:
Saída se executada hoje (24 de janeiro de 2016):
(*) De acordo com a MDN , "navegadores modernos" significa a construção noturna do Chrome 24+, Firefox 29+, Internet Explorer 11, Edge 12+, Opera 15+ e Safari todas as noites .
fonte
Você deve ter um olhar para date.js . Ele adiciona muitos auxiliares convenientes para trabalhar com datas, por exemplo, no seu caso:
Introdução: http://www.datejs.com/2007/11/27/getting-started-with-datejs/
fonte
Posso obter o formato solicitado em uma linha usando nenhuma biblioteca e nenhum método Date, apenas regex:
Nos meus testes, isso funciona de maneira confiável nos principais navegadores (Chrome, Safari, Firefox e IE.) Como o @RobG apontou, a saída de Date.prototype.toString () depende da implementação, portanto, apenas teste a saída para ter certeza funciona bem no seu mecanismo JavaScript. Você pode até adicionar algum código para testar a saída da string e garantir que ela corresponda ao que você espera antes de substituir o regex.
fonte
console.log(new Date().toString().replace(/\S+\s(\S+)\s(\d+)\s(\d+)\s.*/,'$2-$1-$3'));
@ Sébastien - suporte alternativo ao navegador
Documentação: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/toLocaleDateString
fonte
new Date().toLocaleDateString("en-EN", {month: "short", weekday: "short", day: "2-digit", year: "numeric"})
retorna"Wed, Sep 06, 2017"
OK , temos algo chamado Intl, que é muito útil para formatar uma data em JavaScript atualmente:
Sua data como abaixo:
E você muda para Date usando o novo Date () como abaixo:
E agora você pode formatá-lo da maneira que desejar, usando uma lista de locais como abaixo:
Se você deseja exatamente o formato mencionado acima, pode:
E o resultado será:
Para obter mais informações, consulte a documentação da API Intl e Intl.DateTimeFormat .
fonte
Usando um modelo de sequência do ECMAScript Edition 6 (ES6 / ES2015):
Se você precisar alterar os delimitadores:
fonte
Solução em pacote : Luxon
Se você deseja usar uma solução única para atender a todos, recomendo o uso do Luxon (uma versão modernizada do Moment.js ), que também formata muitos idiomas / idiomas e vários outros recursos.
Luxon está hospedado no site Moment.js e desenvolvido por um desenvolvedor do Moment.js porque o Moment.js tem limitações que o desenvolvedor queria abordar, mas não conseguiu.
Para instalar:
npm install luxon
ouyarn add luxon
(visite o link para outros métodos de instalação)Exemplo:
luxon.DateTime.fromISO('2010-08-10').toFormat('yyyy-LLL-dd');
Rendimentos:
Solução Manual
Usando formatação semelhante a Moment.js, Classe DateTimeFormatter (Java) e Classe SimpleDateFormat (Java) , implementei uma solução abrangente em
formatDate(date, patternStr)
que o código é fácil de ler e modificar. Você pode exibir data, hora, AM / PM, etc. Veja o código para mais exemplos.Exemplo:
formatDate(new Date(), 'EEEE, MMMM d, yyyy HH:mm:ss:S')
(
formatDate
é implementado no snippet de código abaixo)Rendimentos:
Experimente o código clicando em "Executar trecho de código".
Padrões de Data e Hora
yy
= Ano de 2 dígitos;yyyy
= ano completoM
= dígito mês;MM
= Mês de 2 dígitos;MMM
= nome curto do mês;MMMM
= nome completo do mêsEEEE
= nome completo do dia da semana;EEE
= nome curto do dia da semanad
= dia do dígito;dd
= Dia de 2 dígitosh
= horas am / pm;hh
= Horas de 2 dígitos am / pm;H
= horas;HH
= Horas de 2 dígitosm
= minutos;mm
= Minutos de 2 dígitos;aaa
= AM / PMs
= segundos;ss
= Segundos de 2 dígitosS
= milissegundosObrigado @Gerry por trazer Luxon.
fonte
SimpleDateFormat
turma problemática foi substituída anos atrás pelajava.time.format.DateTimeFormatter
turma.Aqui está um código que acabei de escrever para lidar com a formatação de data de um projeto no qual estou trabalhando. Ele imita a funcionalidade de formatação de data PHP para atender às minhas necessidades. Sinta-se livre para usá-lo, está apenas estendendo o objeto Date () já existente. Esta pode não ser a solução mais elegante, mas está funcionando para minhas necessidades.
fonte
Uma solução JavaScript sem usar nenhuma biblioteca externa:
fonte
Mais documentação em developer.mozilla.org
fonte
Se você estiver usando a interface do usuário do jQuery no seu código, há uma função incorporada chamada
formatDate()
. Estou usando dessa maneira para formatar a data de hoje:Você pode ver muitos outros exemplos de data de formatação na documentação da interface do usuário do jQuery .
fonte
Temos muitas soluções para isso, mas acho que a melhor delas é o Moment.js. Então, eu pessoalmente sugiro usar o Moment.js para operações de data e hora.
fonte
Uma maneira útil e flexível para formatar o DateTimes em JavaScript é
Intl.DateTimeFormat
:O resultado é:
"12-Oct-2017"
Os formatos de data e hora podem ser personalizados usando o argumento de opções.
O
Intl.DateTimeFormat
objeto é um construtor para objetos que habilitam a formatação de data e hora sensíveis ao idioma.Sintaxe
Parâmetros
localidades
Opcional. Uma sequência com uma tag de idioma BCP 47 ou uma matriz dessas seqüências. Para a forma geral e interpretação do argumento de localidades, consulte a página Intl. As seguintes chaves de extensão Unicode são permitidas:
Opções
Opcional. Um objeto com algumas ou todas as seguintes propriedades:
localeMatcher
O algoritmo de correspondência de localidade a ser usado. Os valores possíveis são
"lookup"
e"best fit"
; o padrão é"best fit"
. Para informações sobre esta opção, consulte a página Intl.fuso horário
O fuso horário a ser usado. As únicas implementações de valor que você deve reconhecer é
"UTC"
; o padrão é o fuso horário padrão do tempo de execução. Implementações podem também reconhecer os nomes de zona de tempo do banco de dados de fuso horário IANA, tais como"Asia/Shanghai"
,"Asia/Kolkata"
,"America/New_York"
.hour12
Se deve ser usado o tempo de 12 horas (em oposição ao tempo de 24 horas). Os valores possíveis são
true
efalse
; o padrão é dependente da localidade.formatMatcher
O algoritmo de correspondência de formato a ser usado. Os valores possíveis são
"basic"
e"best fit"
; o padrão é"best fit"
. Consulte os parágrafos a seguir para obter informações sobre o uso dessa propriedade.As propriedades a seguir descrevem os componentes de data e hora a serem usados na saída formatada e suas representações desejadas. As implementações são necessárias para suportar pelo menos os seguintes subconjuntos:
As implementações podem oferecer suporte a outros subconjuntos e as solicitações serão negociadas em relação a todas as combinações disponíveis de representação de subconjunto para encontrar a melhor correspondência. Dois algoritmos estão disponíveis para essa negociação e selecionados pela propriedade formatMatcher: Um
"basic"
algoritmo totalmente especificado e um algoritmo de "melhor ajuste" dependente da implementação.dia da semana
A representação do dia da semana. Os valores possíveis são
"narrow"
,"short"
,"long"
.era
A representação da época. Os valores possíveis são
"narrow"
,"short"
,"long"
.ano
A representação do ano. Os valores possíveis são
"numeric"
,"2-digit"
.mês
A representação do mês. Os valores possíveis são
"numeric"
,"2-digit"
,"narrow"
,"short"
,"long"
.dia
A representação do dia. Os valores possíveis são
"numeric"
,"2-digit"
.hora
A representação da hora. Os valores possíveis são
"numeric"
,"2-digit"
.minuto
A representação do minuto. Os valores possíveis são
"numeric"
,"2-digit"
.segundo
A representação do segundo. Os valores possíveis são
"numeric"
,"2-digit"
.timeZoneName
A representação do nome do fuso horário. Os valores possíveis são
"short"
,"long"
. O valor padrão para cada propriedade do componente de data e hora é indefinido, mas se todas as propriedades do componente forem indefinidas, o ano, o mês e o dia serão assumidos"numeric"
.Verifique on-line
Mais detalhes
fonte
Isso pode ajudar com o problema:
fonte
d.toLocaleDateString('en-US', options);
se você estiver nos EUA.É assim que eu implementei para meus plugins npm
fonte
March
ficará3arch
com esse código.'M'
aformat = format.replace("M(?!M)", (dt.getMonth()+1).toString());
e colocá-lo acima da linha com'MMMM'
fonte
Sugar.js possui excelentes extensões para o objeto Date, incluindo um método Date.format .
Exemplos da documentação:
fonte
Para quem procura uma solução ES6 realmente simples para copiar, colar e adotar:
fonte
A partir de 2019, parece que você pode obter toLocaleDateString para retornar apenas determinadas partes e, em seguida, você pode juntá-las como desejar:
fonte
Você deve dar uma olhada no DayJs. É um remake de momentos, mas a arquitetura modular é mais leve.
Alternativa rápida de 2kB ao Moment.js com a mesma API moderna
fonte
Para obter "10 de agosto de 2010", tente:
Para suporte ao navegador, consulte toLocaleDateString .
fonte