Percebi que a new Date()
função do JavaScript é muito inteligente em aceitar datas em vários formatos.
Xmas95 = new Date("25 Dec, 1995 23:15:00")
Xmas95 = new Date("2009 06 12,12:52:39")
Xmas95 = new Date("20 09 2006,12:52:39")
Não consegui encontrar documentação em nenhum lugar mostrando todos os formatos de string válidos ao chamar a new Date()
função.
Isto é para converter uma string em uma data. Se olharmos para o lado oposto, isto é, converter um objeto de data em uma string, até agora eu estava com a impressão de que o JavaScript não tinha uma API interna para formatar um objeto de data em uma string.
Nota do editor: A abordagem a seguir é a tentativa do solicitante que trabalhou em um navegador específico, mas não funciona em geral; veja as respostas nesta página para ver algumas soluções reais.
Hoje, eu brinquei com o toString()
método no objeto date e, surpreendentemente, serve ao propósito de formatar a data em strings.
var d1 = new Date();
d1.toString('yyyy-MM-dd'); //Returns "2009-06-29" in Internet Explorer, but not Firefox or Chrome
d1.toString('dddd, MMMM ,yyyy') //Returns "Monday, June 29,2009" in Internet Explorer, but not Firefox or Chrome
Também aqui não encontrei nenhuma documentação sobre todas as maneiras pelas quais podemos formatar o objeto de data em uma string.
Onde está a documentação que lista os especificadores de formato suportados pelo Date()
objeto?
fonte
Respostas:
Adoro 10 maneiras de formatar data e hora usando JavaScript e Trabalhando com Datas .
Basicamente, você tem três métodos e precisa combinar as strings por si mesmo:
Exemplo:
fonte
Moment.js
É uma biblioteca de datas JavaScript (leve) * para analisar, manipular e formatar datas.
(*) significado leve 9,3KB minificado + compactado com gz na menor configuração possível (fevereiro de 2014)
fonte
Se você já estiver usando a interface do usuário do jQuery em seu projeto, poderá usar o método datepicker interno para formatar seu objeto de data:
No entanto, o selecionador de data formata apenas datas e não pode formatar horas.
Dê uma olhada no jQuery UI datepicker formatDate , os exemplos.
fonte
Eu me deparei com isso hoje e fiquei bastante surpreso que ninguém teve tempo para responder a essa pergunta simples. É verdade que existem muitas bibliotecas disponíveis para ajudar na manipulação de datas. Alguns são melhores que outros. Mas essa não foi a pergunta.
AFAIK, JavaScript puro não suporta especificadores de formato da maneira que você indicou que gostaria de usá-los . Mas ele faz métodos de apoio para a formatação de datas e / ou horários, tais como
.toLocaleDateString()
,.toLocaleTimeString()
, e.toUTCString()
.A
Date
referência de objeto que eu uso com mais freqüência está no site w3schools.com (mas uma pesquisa rápida no Google revelará muitos outros que podem atender melhor às suas necessidades).Observe também que a seção Propriedades do objeto Date fornece um link para
prototype
, que ilustra algumas maneiras pelas quais você pode estender o objeto Date com métodos personalizados. Ao longo dos anos, houve um debate na comunidade JavaScript sobre se essa é uma prática recomendada ou não, e não estou defendendo a favor ou contra, apenas apontando sua existência.fonte
Funçã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:
Nota: No entanto, geralmente não é uma boa idéia 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. Existem alguns bons exemplos nesta mesma página.
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 a partir dessas funções de formatação:
fonte
A resposta curta
Não há documentação "universal" que o javascript atenda; todo navegador que possui javascript é realmente uma implementação. No entanto, existe um padrão que a maioria dos navegadores modernos costuma seguir, e esse é o padrão EMCAScript; as seqüências padrão ECMAScript precisariam, no mínimo, de uma implementação modificada da definição da ISO 8601.
Além disso, há um segundo padrão estabelecido pela IETF que os navegadores também tendem a seguir, que é a definição de carimbos de data e hora feita no RFC 2822. A documentação real pode ser encontrada na lista de referências na parte inferior.
Com isso, você pode esperar funcionalidades básicas, mas o que "deveria" ser não é inerentemente o que "é". No entanto, vou me aprofundar um pouco nisso, pois parece que apenas três pessoas responderam à pergunta (Scott, goofballLogic e peller, a saber) que, para mim, sugere que a maioria das pessoas não sabe o que realmente acontece quando você crie um objeto Date.
A resposta longa
Para responder à pergunta, ou até mesmo procurar a resposta para essa pergunta, você precisa saber que o javascript não é uma linguagem nova; na verdade, é uma implementação do ECMAScript e segue os padrões do ECMAScript (mas observe, o javascript também na verdade antecede esses padrões; os padrões do EMCAScript são criados a partir da implementação inicial do LiveScript / JavaScript). O padrão atual do ECMAScript é 5.1 (2011); no momento em que a pergunta foi feita originalmente (junho de 2009), o padrão era 3 (4 foi abandonado), mas 5 foi lançado logo após o cargo no final de 2009. Isso deve descrever um problema; qual padrão uma implementação de javascript pode seguir, pode não refletir o que realmente está em vigor, porque a) é uma implementação de um determinado padrão; b) nem todas as implementações de um padrão são puritanas,
Essencialmente, ao lidar com javascript, você está lidando com um derivado (javascript específico para o navegador) de uma implementação (o próprio javascript). A V8 do Google, por exemplo, implementa o ECMAScript 5.0, mas o JScript do Internet Explorer não tenta se adaptar a nenhum padrão do ECMAScript, mas o Internet Explorer 9 está em conformidade com o ECMAScript 5.0.
Quando um único argumento é passado para o novo Date (), ele lança esse protótipo de função:
Quando dois ou mais argumentos são passados para o novo Date (), ele lança esse protótipo de função:
Ambas as funções devem parecer familiares, mas isso não responde imediatamente à sua pergunta e o que quantifica como um "formato de data" aceitável requer mais explicações. Quando você passa uma string para o novo Date (), ele chama o protótipo (observe que estou usando a palavra protótipo livremente; as versões podem ser funções individuais ou podem fazer parte de uma instrução condicional em uma única função) para nova data (valor) com sua string como argumento para o parâmetro "value". Esta função primeiro verifica se é um número ou uma string. A documentação para esta função pode ser encontrada aqui:
A partir disso, podemos deduzir que, para obter a formatação de string permitida para a nova data (valor), precisamos examinar o método Date.parse (string). A documentação para este método pode ser encontrada aqui:
E podemos inferir ainda mais que as datas devem estar em um formato estendido ISO 8601 modificado, conforme especificado aqui:
No entanto, podemos reconhecer por experiência que o objeto Date do javascript aceita outros formatos (imposto pela existência dessa pergunta em primeiro lugar), e isso é bom porque o ECMAScript permite a implementação de formatos específicos. No entanto, isso ainda não responde à pergunta de qual documentação está disponível nos formatos disponíveis, nem de quais formatos são realmente permitidos. Vamos dar uma olhada na implementação javascript do Google, V8; observe que não estou sugerindo que este é o melhor mecanismo javascript (como definir "melhor" ou até "bom") e não se pode presumir que os formatos permitidos na V8 representam todos os formatos disponíveis hoje, mas acho justo assumir que eles seguem as expectativas modernas.
Observando a função DateConstructor, podemos deduzir que precisamos encontrar a função DateParse; no entanto, observe que "ano" não é o ano real e é apenas uma referência ao parâmetro "ano".
Isso chama% DateParseString, que na verdade é uma referência de função de tempo de execução para uma função C ++. Refere-se ao seguinte código:
A chamada de função com a qual estamos preocupados nessa função é para DateParser :: Parse (); Se você ignorar a lógica em torno dessas chamadas de função, essas são apenas verificações para se adequar ao tipo de codificação (ASCII e UC16). DateParser :: Parse é definido aqui:
Essa é a função que realmente define quais formatos ele aceita. Essencialmente, ele verifica o padrão EMCAScript 5.0 ISO 8601 e, se não for compatível com os padrões, tentará criar a data com base nos formatos herdados. Alguns pontos-chave com base nos comentários:
Portanto, isso deve ser suficiente para fornecer uma idéia básica do que esperar quando se trata de passar uma string para um objeto Date. Você pode expandir ainda mais isso observando a seguinte especificação que o Mozilla aponta na Mozilla Developer Network (compatível com os carimbos de data e hora da IETF RFC 2822):
A Microsoft Developer Network menciona adicionalmente um padrão adicional para o objeto Date: ECMA-402, a Especificação da API de Internacionalização da ECMAScript, que é complementar ao padrão ECMAScript 5.1 (e futuros). Isso pode ser encontrado aqui:
De qualquer forma, isso deve ajudar a destacar que não há "documentação" que represente universalmente todas as implementações de javascript, mas ainda há documentação suficiente disponível para compreender com precisão quais seqüências de caracteres são aceitáveis para um objeto Date. Quite a pergunta carregada quando você pensa sobre isso, sim? : P
fonte
Verifique o Datejs ao lidar com datas em JavaScript. É bastante impressionante e bem documentado, como você pode ver no caso da função toString .
Edição : Tyler Forsythe ressalta, que datejs está desatualizado. Eu o uso no meu projeto atual e não tive nenhum problema com ele, no entanto, você deve estar ciente disso e considerar alternativas.
fonte
Você pode simplesmente expandir o
Date
Objeto com um novoformat
método, conforme observado por meizz , abaixo é o código fornecido pelo autor. E aqui está um violão .fonte
console.log(new Date('2014-06-01')) -> May
eu acho que tem algo a ver com o fuso horário: DA funcionalidade que você cita não é Javascript padrão, provavelmente não é portátil em navegadores e, portanto, não é uma boa prática. A especificação do ECMAScript 3 deixa a função de análise e formatos de saída até a implementação do Javascript. O ECMAScript 5 adiciona um subconjunto do suporte ISO8601. Acredito que a função toString () mencionada é uma inovação em um navegador (Mozilla?)
Várias bibliotecas fornecem rotinas para parametrizar isso, algumas com amplo suporte à localização. Você também pode verificar os métodos em dojo.date.locale .
fonte
Eu criei este formatador muito simples, é recortado / n / colável (atualizado com a versão mais limpa):
http://snipplr.com/view/66968.82825/
fonte
new DateFmt()
)Estrutura livre, limitada, mas leve
fonte
O DateJS certamente possui todos os recursos, mas eu recomendaria essa lib muito mais simples (JavaScript Date Format), que eu prefiro simplesmente porque são apenas 120 linhas.
fonte
Tendo examinado várias das opções fornecidas em outras respostas, decidi escrever minha própria solução limitada, mas simples, que outras pessoas também podem achar útil.
Exemplo de uso:
fonte
format = format.replace("YY", (""+date.getFullYear()).substring(2));
. Porém, isso está ficando feio - você provavelmente deseja seguir a rota RegEx ou similar.Aqui está uma função que eu uso muito. O resultado é aaaa-mm-dd hh: mm: ss.nnn.
fonte
Você pode achar útil essa modificação do objeto de data, que é menor que qualquer biblioteca e é facilmente extensível para suportar diferentes formatos:
NOTA:
CÓDIGO
USAR
fonte
Apenas para continuar a sólida resposta de gongzhitaao - isso lida com AM / PM
fonte
Não consegui encontrar nenhuma documentação definitiva sobre os formatos de data válidos, então escrevi meu próprio teste para ver o que é suportado em vários navegadores.
http://blarg.co.uk/blog/javascript-date-formats
Meus resultados concluíram que os seguintes formatos são válidos em todos os navegadores que testei (os exemplos usam a data "9 de agosto de 2013"):
[Ano inteiro] / [Mês] / [Número da data] - O mês pode ser o número com ou sem zero inicial ou o nome do mês em formato curto ou longo, e o número da data pode ser com ou sem zero inicial.
[Mês] / [Ano inteiro] / [Número da data] - O mês pode ser o número com ou sem zero inicial ou o nome do mês em formato curto ou longo, e o número da data pode ser com ou sem zero inicial.
Qualquer combinação de [Ano inteiro], [Nome do mês] e [Número da data] separados por espaços - o nome do mês pode estar em formato curto ou longo e o número da data pode estar com ou sem um zero à esquerda.
Também é válido em "navegadores modernos" (ou em todos os navegadores, exceto IE9 e abaixo)
[Ano inteiro] - [Número do mês] - [Número da data] - O mês e o número da data devem incluir zeros à esquerda (este é o formato que o tipo de data do MySQL usa)
Usando nomes de mês:
Curiosamente, ao usar nomes de mês, descobri que apenas os 3 primeiros caracteres do nome do mês são usados para que todos os itens a seguir sejam perfeitamente válidos:
fonte
Formatar e, especialmente, analisar datas em JavaScript pode ser um pouco difícil. Nem todos os navegadores lidam com datas da mesma maneira. Portanto, embora seja útil conhecer os métodos básicos, é mais prático usar uma biblioteca auxiliar.
A biblioteca javascript do XDate de Adam Shaw existe desde meados de 2011 e ainda está em desenvolvimento ativo. Possui documentação fantástica, uma ótima API, formatação, tenta permanecer compatível com versões anteriores e até suporta seqüências localizadas.
Link para alterar as cadeias de código de idioma: https://gist.github.com/1221376
fonte
Código de exemplo:
Resultado:
fonte
new Date();// = Fri Nov 22 2013 17:48:22 GMT+0100
, a saída com o código acima será"16:48:22"
A biblioteca sugar.js possui ótimas funcionalidades para trabalhar com datas em JavaScript. E está muito bem documentado .
Alguns exemplos:
fonte
Todos os navegadores
A maneira mais confiável de formatar uma data com o formato de origem que você está usando é aplicando as seguintes etapas:
new Date()
para criar umDate
objeto.getDate()
,.getMonth()
e.getFullYear()
para obter respectivamente o dia, mês e anoExemplo:
(Veja também este violino ).
Apenas navegadores modernos
Você também pode usar o
.toLocaleDateString
método interno para fazer a formatação para você. Você só precisa passar a localidade e as opções adequadas para corresponder ao formato correto, que infelizmente é suportado apenas pelos navegadores modernos (*) :(Veja também este violino ).
(*) De acordo com o MDN , "Navegadores modernos" significa Chrome noturno, Firefox 29+, IE11, Edge12 +, Opera 15+ e Safari noturno
fonte
Apenas outra opção, que escrevi:
Biblioteca DP_DateExtensions
Não tenho certeza se isso ajudará, mas achei útil em vários projetos - parece que ele fará o que você precisa.
Suporta formatação de data / hora, matemática da data (adicionar / subtrair partes da data), comparação de datas, análise de datas, etc. É de código aberto.
Não há razão para considerá-lo se você já estiver usando uma estrutura (todos eles são capazes), mas se você precisar adicionar rapidamente a manipulação de datas a um projeto, dê uma chance.
fonte
Se você deseja mostrar apenas o tempo com dois dígitos, isso pode ajudá-lo:
fonte
use estas funções
consulte o link abaixo para obter mais detalhes https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date
fonte
JsSimpleDateFormat é uma biblioteca que pode formatar o objeto de data e analisar a sequência de caracteres formatada de volta ao objeto Date. Ele usa o formato Java (classe SimpleDateFormat). O nome dos meses e dias pode ser localizado.
Exemplo:
fonte
A resposta é "lugar nenhum", pois a formatação da data é uma funcionalidade proprietária. Eu não acho que as funções toString se destinam a estar em conformidade com um formato específico. por exemplo, na especificação do ECMAScript 5.1 ( http://www.ecma-international.org/publications/files/ECMA-ST/Ecma-262.pdf , 8/2/2013, página 173), a função toString está documentada da seguinte forma :
Funções como as amostras abaixo podem ser usadas para realizar a formatação com bastante facilidade.
fonte
Se você não precisar de todos os recursos fornecidos por uma biblioteca como o Moment.js , poderá usar minha porta de strftime . É leve (1,35 KB vs. 57,9 KB minificado em comparação com Moment.js 2.15.0) e fornece a maior parte das funcionalidades do
strftime()
.Uso da amostra:
O código mais recente está disponível aqui: https://github.com/thdoan/strftime
fonte
A maneira correta de formatar uma data para retornar "2012-12-29" é com o script do JavaScript Date Format :
Este código NÃO funciona:
fonte
Pessoalmente, como uso PHP e jQuery / javascript em medidas iguais, uso a função date em php.js http://phpjs.org/functions/date/
Usar uma biblioteca que usa as mesmas strings de formato de algo que eu já sei é mais fácil para mim, e o manual que contém todas as possibilidades de strings de formato para a função date está obviamente online no php.net
Você simplesmente inclui o arquivo date.js. no seu HTML usando o método preferido e o chama assim:
Você pode usar d1.getTime () em vez de valueOf () se desejar, eles fazem a mesma coisa.
A divisão por 1000 do registro de data e hora do javascript ocorre porque o registro de data e hora do javascript está em milissegundos, mas o registro de data e hora do PHP está em segundos.
fonte
Muitas estruturas (que você já pode estar usando) possuem formatação de data que você pode não estar ciente. O jQueryUI já foi mencionado, mas outras estruturas, como Kendo UI (Globalização) , Yahoo UI (Util) e AngularJS, também os possuem.
fonte