Como obtenho a data atual em JavaScript?

2308

Como faço para obter a data atual em JavaScript?

Suresh Chaganti
fonte
383
var currentTime = new Date();
217 Hendrik
11
Consulte a documentação para o objeto Data . Tem exemplos.
Quentin
24
new Date()retorna a hora atual , não a data atual . A distinção importa se você está tentando compará-la com outra data que não possui um componente de horário (ou seja, é à meia-noite).
21815 Steve
11
use momentJs, essa lib é ouro para desenvolvedores.
RBoschini

Respostas:

2717

Use new Date()para gerar um novo Dateobjeto que contém a data e hora atuais.

var today = new Date();
var dd = String(today.getDate()).padStart(2, '0');
var mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
var yyyy = today.getFullYear();

today = mm + '/' + dd + '/' + yyyy;
document.write(today);

Isso fornecerá a data de hoje no formato de mm / dd / aaaa.

Simplesmente mude today = mm +'/'+ dd +'/'+ yyyy;para o formato que desejar.

Samuel Meddows
fonte
7
obrigado pelo código .. mas o que eu ainda não entendi, é a linha se (dd <10) {dd = '0' + dd} ... por que <10? pelo que entendi no código é se o caractere do dia for menor que 2, basta adicionar um 0 anterior na frente do dia .. mas por que 10?
151313 imin
20
@imin: porque menos de 2 caracteres significa 1 caráter ... e tudo de 10 anos (1 a 9) é um personagem, então teremos 01, 02, ...,09
ZFM
11
@MounaCheikhna - Como poderíamos estar no ano de 999?
Nnnnnn 23/04
21
Troque o mês e a data se você não estiver na América do Norte.
precisa
3
O novo Date.prototype.toLocaleDateString()método é uma solução mais flexível. Faz parte do JavaScript desde o ECMAScript 5.1 e é bem suportado por navegadores sempre verdes. MDN:toLocaleDateString()
Adam Brown
443

var utc = new Date().toJSON().slice(0,10).replace(/-/g,'/');
document.write(utc);

Use a replaceopção para reutilizar a utcvariável new Date(utc), como Firefox e Safari não reconhece uma data com hífens.

Varun Natraaj
fonte
6
Acho que não :) Parece bem direto!
Varun Natraaj
6
toJSON () retorna como utc datetime
Andy N
1
Retorna um datetime JSON. toUTCString()retorna como utc datetime.
Varun Natraaj
25
Não considera TimezoneOffset. No momento do teste, eu estava procurando "agora" e recebi "ontem". stackoverflow.com/questions/13646446/…
mickmackusa
7
Perfeito. Esta é a maneira mais limpa de fazer isso que estou vendo aqui. Funciona bem no MomentJS para "Today, Not Now"moment( new Date().toJSON().slice(0, 10) )
Kyle Hotchkiss
234

ATUALIZADA! , Rolar para baixo

Se você quer algo simples e bonito para o usuário final ... Also, fixed a small suffix issue in the first version below. Now properly returns suffix.

var objToday = new Date(),
	weekday = new Array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'),
	dayOfWeek = weekday[objToday.getDay()],
	domEnder = function() { var a = objToday; if (/1/.test(parseInt((a + "").charAt(0)))) return "th"; a = parseInt((a + "").charAt(1)); return 1 == a ? "st" : 2 == a ? "nd" : 3 == a ? "rd" : "th" }(),
	dayOfMonth = today + ( objToday.getDate() < 10) ? '0' + objToday.getDate() + domEnder : objToday.getDate() + domEnder,
	months = new Array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'),
	curMonth = months[objToday.getMonth()],
	curYear = objToday.getFullYear(),
	curHour = objToday.getHours() > 12 ? objToday.getHours() - 12 : (objToday.getHours() < 10 ? "0" + objToday.getHours() : objToday.getHours()),
	curMinute = objToday.getMinutes() < 10 ? "0" + objToday.getMinutes() : objToday.getMinutes(),
	curSeconds = objToday.getSeconds() < 10 ? "0" + objToday.getSeconds() : objToday.getSeconds(),
	curMeridiem = objToday.getHours() > 12 ? "PM" : "AM";
var today = curHour + ":" + curMinute + "." + curSeconds + curMeridiem + " " + dayOfWeek + " " + dayOfMonth + " of " + curMonth + ", " + curYear;

document.getElementsByTagName('h1')[0].textContent = today;
<h1></h1>

ATUALIZAÇÃO DO UBBER Após muita procrastinação, finalmente consegui o GitHubbed e atualizei isso com a solução final que estou usando para mim. Ele teve algumas edições de última hora para torná-lo mais doce! Se você está procurando o jsFiddle antigo , consulte isso .

Esta atualização vem em dois sabores, ainda relativamente pequenos, embora não tão pequenos quanto a minha resposta original acima. Se você quiser extremamente pequeno, vá com isso.
Nota também: isso ainda é menos inchado que moment.js. Embora moment.js seja legal, imo, ele tem muitos métodos seculares, que exigem um momento de aprendizado como se fosse um idioma. O meu aqui usa o mesmo formato comum que o PHP: date .

Links Rápidos

Sabor 1new Date().format(String) Meu Fav Pessoal. Conheço o tabu, mas funciona muito bem no objeto Data. Esteja ciente de quaisquer outros mods que você possa ter para o objeto Data.

//  use as simple as
new Date().format('m-d-Y h:i:s');   //  07-06-2016 06:38:34

Sabor 2dateFormat(Date, String) Método all-in-one mais tradicional. Tem toda a capacidade do anterior, mas é chamado pelo método com o parâmetro Date.

//  use as simple as
dateFormat(new Date(), 'm-d-Y h:i:s');  //  07-06-2016 06:38:34

Sabor de bônus (requer jQuery)$.date(Date, String) Contém muito mais do que apenas uma formatopção simples . Ele estende o objeto Date base e inclui métodos como addDays. Para mais informações, consulte o Git .

Neste mod, os caracteres de formato são inspirados no PHP: date . Para uma lista completa, consulte o meu README

Este mod também possui uma lista muito maior de formatos pré-fabricados. Para usar um formato pré-fabricado, basta digitar o nome da chave.dateFormat(new Date(), 'pretty-a');

  • 'composto'
    • 'commonLogFormat' == 'd / M / A: G: i: s'
    • 'exif' == 'Y: m: d G: i: s'
    • 'isoYearWeek' == 'Y \\ WW'
    • 'isoYearWeek2' == 'S - \\ WW'
    • 'isoYearWeekDay' == 'Y \\ WWj'
    • 'isoYearWeekDay2' == 'S - \\ WW-j'
    • 'mySQL' == 'Ymd h: i: s'
    • 'postgreSQL' == 'Yz'
    • 'postgreSQL2' == 'Yz'
    • 'soap' == 'Ymd \\ TH: i: su'
    • 'soap2' == 'Ymd \\ TH: i: s.uP'
    • 'unixTimestamp' == '@U'
    • 'xmlrpc' == 'Ymd \\ TG: i: s'
    • 'xmlrpcCompact' == 'Ymd \\ tGis'
    • 'wddx' == 'Ynj \\ TG: i: s'
  • 'constantes'
    • 'AMERICAN' == 'F j Y'
    • 'AMERICANSHORT' == 'm / d / A'
    • 'AMERICANSHORTWTIME' == 'm / d / A h: i: sA'
    • 'ATOM' == 'Ymd \\ TH: i: sP'
    • 'COOKIE' == 'l dMY H: i: s T'
    • «EUROPEAN» == 'j FY'
    • 'EUROPEANSHORT' == 'dmY'
    • «EUROPEANSHORTWTIME» == 'dmY H: i: s'
    • 'ISO8601' == 'Ymd \\ TH: i: sO'
    • 'LEGAL' == 'j FY'
    • 'RFC822' == 'D d M y H: i: s O'
    • 'RFC850' == 'l dMy H: i: s T'
    • 'RFC1036' == 'D d M y H: i: s O'
    • 'RFC1123' == 'D d MYH: i: s O'
    • 'RFC2822' == 'D d MYH: i: s O'
    • 'RFC3339' == 'Ymd \\ TH: i: sP'
    • 'RSS' == 'D MYH: i: s O'
    • 'W3C' == 'Ymd \\ TH: i: sP'
  • 'bonita'
    • 'pretty-a' == 'g: i.sA l jS \\ o \\ f FY'
    • 'pretty-b' == 'g: iA l jS \\ o \\ f FY'
    • 'pretty-c' == 'n / d / Y g: iA'
    • 'pretty-d' == 'n / d / Y'
    • 'pretty-e' == 'F jS - g: ia'
    • 'pretty-f' == 'g: iA'

Como você pode notar, você pode usar o dobro \para escapar de um personagem.


SpYk3HH
fonte
14
@KamranAhmed Quase 2 anos e mais de 40 votos depois, eu diria que o esforço valeu a pena. Ri muito. Desde então, expandi essa classe muito pessoalmente, mas não a enviei, pois eu pensava que a maioria das pessoas usaria esse outro plugin js date que eu recomendo, mas acho que devo torná-la mais "pública" e adicioná-la aqui.
SpYk3HH
14
moment.js agora é a coisa que você usaria atualmente
Christian Stewart
1
Acima, há um erro de digitação (que demorei um pouco para identificar), ele usa uma variável "today" na linha: "dayOfMonth = today +"
user1435707 18/17/17 /
"hoje + (objToday.getDate () <10)? '0' + objToday.getDate () + domEnder: objToday.getDate () + domEnder" - JS é uma linguagem estúpida.
Alex S
211

O mais curto possível.

Para obter um formato como "2018-08-03":

let today = new Date().toISOString().slice(0, 10)

console.log(today)

Para obter um formato como "03/08/2018":

let today = new Date().toLocaleDateString()

console.log(today)

Além disso, você pode passar a localidade como argumento, por exemplo toLocaleDateString("sr"), etc.

Damjan Pavlica
fonte
3
Isso ainda falha devido à mudança de fuso horário.
LStarky
7
Porque é que esta não é a resposta aceita, mais simples e usos construído em funções
lifesoordinary
171

Se você quiser apenas uma data sem informações de hora, use:

var today = new Date();
    today.setHours(0, 0, 0, 0);

document.write(today);

Marechal
fonte
40
Esta parece ser a única resposta que realmente responde à pergunta. Todo mundo responde sobre como formatar uma data como string.
Inrego
1
Concordo. Na verdade, eu queria escrever uma resposta semelhante a esta e, em seguida, uma pequena janela apareceu perguntando se eu tinha lido todas as respostas. Como li apenas as principais respostas, decidi verificar se há respostas corretas e essa foi a primeira resposta correta.
Lajos Arpad
Isso define as horas usando o UTC, o que pode não funcionar em todos os casos de uso.
McKay
103

Tente o seguinte:

var currentDate = new Date()
var day = currentDate.getDate()
var month = currentDate.getMonth() + 1
var year = currentDate.getFullYear()
document.write("<b>" + day + "/" + month + "/" + year + "</b>")

O resultado será como

15/2/2012
Jimmy M
fonte
67

Se você está procurando um controle muito mais granular sobre os formatos de data, recomendo verificar o momentjs. Biblioteca fantástica - e apenas 5KB. http://momentjs.com/

benjamin.keen
fonte
7
Suporta localização como um encanto.
Risadinha 27/08
Atualmente, usamos date-fns - trata as datas como Imutáveis ​​(o momento altera as datas), é mais rápido e é modular (basta importar o que você precisa).
Freewalker # 06/17
2
Seis anos depois de publicar esse momento, o JS ganhou bastante peso. Você pode conferir o github.com/iamkun/dayjs - eu já o descrevi como "momentjs em uma dieta". A mesma API simples.
benjamin.keen
55

Você pode usar o moment.js: http://momentjs.com/

var m = moment().format("DD/MM/YYYY");

document.write(m);
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>

Morad
fonte
30
O momento é um exagero por apenas obter a data atual.
Dan Dascalescu 27/10
Ou moment().format("L")para respeitar o local atual.
Duncan
@DanDascalescu Na verdade, a especificação básica do Javascript para DateTime é tão ruim.
Todd
Se você já possui momentjs importados em seu projeto, esta é a resposta mais simples e limpa.
Adil H. Raza
52

var d = (new Date()).toString().split(' ').splice(1,3).join(' ');

document.write(d)

Para dividir em etapas:

  1. (new Date()).toString() dá "28 de junho de 2013 às 15:30:18 GMT-0700 (PDT)"

  2. (new Date()).toString().split(' ') divide a string acima em cada espaço e retorna uma matriz da seguinte maneira: ["Fri", "Jun", "28", "2013", "15:31:14", "GMT-0700", "(PDT)" ]

  3. (new Date()).toString().split(' ').splice(1,3).join(' ') pega os segundo, terceiro e quarto valores da matriz acima, junta-os a espaços e retorna uma string "28 de junho de 2013"

Rishabh Marya
fonte
2
Eu precisava de um horário em 00:00:00 e não queria reconstruí-lo manualmente; o passo 2 me leva lá perfeitamente. Parabéns!
panhandel
3
Você pode salvar alguns bytes fazendo o seguinte:Date().split(' ').splice(1,3).join(' ')
hyde
47

Isso funciona sempre:

    var now = new Date();
    var day = ("0" + now.getDate()).slice(-2);
    var month = ("0" + (now.getMonth() + 1)).slice(-2);
    var today = now.getFullYear() + "-" + (month) + "-" + (day);
    
    console.log(today);

Roshan
fonte
45
var date = new Date().toLocaleDateString("en-US");

Além disso, você pode chamar o método toLocaleDateStringcom dois parâmetros:

var date = new Date().toLocaleDateString("en-US", {
    "year": "numeric",
    "month": "numeric"
});

Artigo no MSDN . Mais sobre esse método no MDN .

Dunaevsky Maxim
fonte
Bom, funciona no Chrome. Infelizmente, não funciona no PhantomJS a partir de 22/4/2016
chris
solução legal. deve estar no topo. new Date().toLocaleDateString("de-de")faz o truque para mim.
User3772108
29

Versão mais limpa e simples:

new Date().toLocaleString();

O resultado varia de acordo com a localidade do usuário :

27/02/2017, 9:15:41 AM

Oded Breiner
fonte
27

Se você estiver satisfeito com o formato AAAA-MM-DD, isso também funcionará.

new Date().toISOString().split('T')[0]

2018-03-10

Aung Htet
fonte
Como o comprimento é sempre fixo, também podemos usar substring. new Date (). toISOString (). substring (0, 10); Pode ser um pouco mais rápido também.
Mika Karjunen 06/08/19
23

Você pode usar a biblioteca Date.js. que estende o objeto Date; portanto, você pode ter o método .today ().

eomeroff
fonte
11
se você estiver usando jQuery UI com um datepicker, você pode usar $ .datepicker.formatDate ( 'aa / mm / dd', new Date ())
Peter Munnings
16

A resposta de Varun não conta para TimezoneOffset . Aqui está uma versão que faz:

var d = new Date()
new Date(d.getTime() - d.getTimezoneOffset() * 60000).toJSON().slice(0, 10) // 2015-08-11

São TimezoneOffsetminutos, enquanto o construtor Date leva milissegundos, portanto, a multiplicação por 60000.

user1338062
fonte
15

A resposta mais curta é: new Date().toJSON().slice(0,10)

Blair Anderson
fonte
Eu estava procurando por uma função de semente muito simples que muda regularmente. Esta resposta é um verdadeiro deleite.
Nirazul 11/03/19
11
new Date().toDateString();

Resultado:

"Qua 03 fev 2016"

Isayevskiy_Sergey
fonte
11

Como toISOString()retornará apenas a hora UTC atual, não a hora local. Temos que marcar uma data usando a função '.toString ()' para obter a data em um yyyy-MM-ddformato como

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('T')[0]);

Para obter data e hora em yyyy-MM-ddTHH:mm:ssformato

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('.')[0]);

Para obter data e hora em yyyy-MM-dd HH:mm:ssformato

document.write(new Date(new Date().toString().split('GMT')[0]+' UTC').toISOString().split('.')[0].replace('T',' '));

jafarbtech
fonte
10

Se você deseja um DD/MM/YYYYformato simples , acabei de apresentar esta solução simples, embora não prefixe zeros ausentes.

var d = new Date();
document.write( [d.getDate(), d.getMonth()+1, d.getFullYear()].join('/') );

Phil Ricketts
fonte
9
new Date().toISOString().slice(0,10); 

funcionaria também

Toucouleur
fonte
8

ÚLTIMA EDIÇÃO: 23/8/19 A biblioteca date-fns funciona como moment.js, mas tem uma pegada MUITO menor. Ele permite que você escolha quais funções deseja incluir no seu projeto para não precisar compilar toda a biblioteca para formatar a data de hoje. Se uma biblioteca mínima de terceiros não for uma opção para o seu projeto, eu apoio a solução aceita por Samuel Meddows na parte superior.

Preservar a história abaixo porque ajudou algumas pessoas. Mas, para constar, é bastante hacky e passível de interrupção sem aviso, como são a maioria das soluções neste post

EDIT 7/7/2017 Uma solução JS de uma linha:

tl; dr

var todaysDate = new Date(Date.now()).toLocaleString().slice(0,3).match(/[0-9]/i) ? new Date(Date.now()).toLocaleString().split(' ')[0].split(',')[0] : new Date(Date.now()).toLocaleString().split(' ')[1] + " " + new Date(Date.now()).toLocaleString().split(' ')[2] + " " + new Date(Date.now()).toLocaleString().split(' ')[3];

edge, ff latest, & chrome return todaysDate = "2/7/2017"
"funcionam" * no IE10 +

Explicação

Eu descobri que o IE10 e o IE Edge fazem as coisas de maneira um pouco diferente. comnew Date(Date.now()).toLocaleString() como entrada,

O IE10 retorna:

"Tuesday, February 07, 2017 2:58:25 PM"

Eu poderia escrever uma grande função longa e FTFY. Mas você realmente deve usar o moment.js para essas coisas. Meu script apenas limpa isso e fornece a notação tradicional expandida dos EUA:> todaysDate = "March 06, 2017"

IE EDGE retorna:

"‎2‎/‎7‎/‎2017‎ ‎2‎:‎59‎:‎27‎ ‎PM"

Claro que não poderia ser tão fácil. A sequência de datas da borda possui caracteres "•" invisíveis entre cada uma visível. Portanto, agora não apenas verificaremos se o primeiro caractere é um número, mas os três primeiros, uma vez que qualquer caractere único em todo o período acabará sendo um ponto ou uma barra em algum momento. Então, para simplificar, basta .slice () os três primeiros caracteres (buffer minúsculo contra futuras travessuras) e verifique se há números. Provavelmente, deve-se notar que esses pontos invisíveis podem persistir em seu código. Talvez eu investigue isso se você tiver planos maiores do que apenas imprimir essa sequência na sua visualização.

One atualização one-liner:

var todaysDate = new Date(Date.now()).toLocaleString().slice(0,3).match(/[0-9]/i) ? new Date(Date.now()).toLocaleString().split(' ')[0].split(',')[0] : new Date(Date.now()).toLocaleString().split(' ')[1] + " " + new Date(Date.now()).toLocaleString().split(' ')[2] + " " + new Date(Date.now()).toLocaleString().split(' ')[3];

Isso é uma merda de ler. E se:

var dateString = new Date(Date.now()).toLocaleString();
var todaysDate = dateString.slice(0,3).match(/[0-9]/i) ? dateString.split(' ')[0].split(',')[0] : dateString.split(' ')[1] + " " + dateString.split(' ')[2] + " " + dateString.split(' ')[3];

RESPOSTA ORIGINAL

Eu tenho uma linha para você:

new Date(Date.now()).toLocaleString().split(', ')[0];

e [1]lhe dará a hora do dia.

Cameron Donahue
fonte
7

Você pode usar isso

<script>
function my_curr_date() {      
    var currentDate = new Date()
    var day = currentDate.getDate();
    var month = currentDate.getMonth() + 1;
    var year = currentDate.getFullYear();
    var my_date = month+"-"+day+"-"+year;
    document.getElementById("dateField").value=my_date;    
}
</script>

O HTML é

<body onload='return my_curr_date();'>
    <input type='text' name='dateField' id='dateField' value='' />
</body>
Roger
fonte
6

Se você estiver usando jQuery. Experimente este forro:

$.datepicker.formatDate('dd/mm/yy', new Date());

Aqui está a convenção para formatar a data

  • d - dia do mês (sem zero inicial)
  • dd - dia do mês (dois dígitos)
  • o - dia do ano (sem zeros à esquerda)
  • oo - dia do ano (três dígitos)
  • D - nome do dia abreviado
  • DD - nome do dia
  • m - mês do ano (sem zero inicial)
  • mm - mês do ano (dois dígitos)
  • M - nome do mês abreviado
  • MM - nome do mês
  • y - ano (dois dígitos)
  • aa - ano (quatro dígitos)

Aqui está a referência para o dateQuicker do jQuery

Souvik
fonte
5

Uma maneira direta de fazer isso (considerando o fuso horário atual, aproveitando o formato ISO aaaa-mm-dd) é:

let d = new Date().toISOString().substring(0,19).replace("T"," ") // "2020-02-18 16:41:58"

Geralmente, esse é um formato de data compatível com todos os fins e você pode convertê-lo em um valor de data puro, se necessário:

Date.parse(d); // 1582044297000
Caiuby Freitas
fonte
4

Você pode fazer o checkout

var today = new Date();
today = parseInt(today.getMonth()+1)+'/'+today.getDate()+'/'+today.getFullYear()+"\nTime : "+today.getHours()+":"+today.getMinutes()+":"+today.getSeconds();
document.write(today);

E consulte a documentação do construtor Date (). ligação

Akhil
fonte
4

Qual é o grande problema com isso? A maneira mais limpa de fazer isso é

var currentDate=new Date().toLocaleString().slice(0,10);

ISONecroMAn
fonte
1
Isso retornaria erros, como este 3/4/2018, , melhores para usar new Date().toJSON().slice(0,10).
DevonDahon
Isso é perfeito para simplesmente obter uma data para exibição ou informações no log do console ou na interface do usuário. Melhor para mim sem o.slice(0,10)
Paul Carlton
4

Isso pode ajudá-lo

var date = new Date();
console.log(date.getDate()+'/'+(date.getMonth()+1)+'/'+date.getFullYear());

Isso imprimirá a data atual no formato dd / MM / aaaa

Jayant Patil
fonte
4

É bom obter uma data formatada

let date = new Date().toLocaleDateString("en", {year:"numeric", day:"2-digit", month:"2-digit"});
console.log(date);

Yugandhar Chaudhari
fonte
3

Eu acho que essa é uma pergunta antiga, mas a maneira mais fácil seria a seguinte:

var date = new Date();
var TimeStamp = date.toLocaleString();

function CurrentTime(){
  alert(TimeStamp);
}

Isso pegará a hora atual, passará para uma string com base na localização e, em seguida, você poderá chamar a função CurrentTime para exibir a hora. Essa seria, para mim, a maneira mais eficaz de obter um carimbo de data / hora para alguma coisa.

Brock Davis
fonte
Isso retornará dados + tempo, por exemplo. '2018-4-6 16:20:22', e a questão é como obter apenas data.
Vlad Bezden