Como obtenho a hora atual apenas em JavaScript

144

Como posso obter o horário atual em JavaScript e usá-lo em um timepicker?

Eu tentei var x = Date()e consegui:

Terça-feira, 15 de maio de 2012 05:45:40 GMT-0500

Mas eu preciso apenas do horário atual, por exemplo, 05:45

Como posso atribuir isso a uma variável?

hss
fonte
15
@swati Porque queremos que esta seja a nossa fonte para todos os nossos problemas de programação. Talvez alguém tenha uma solução melhor e, dessa forma, todos possam ser listados como referência em um único local.
Alfred
27
@swati - Eu sei que você escreveu esse comentário há mais de 3 anos, mas agora esta página é o resultado de pesquisa nº 1 do Google em "obter JavaScript de parte do tempo". Lembre-se de que a pergunta de hoje É os resultados da pesquisa de amanhã.
David Deutsch
@DavidDeutsch Deve ser como um cabeçalho em negrito na página Fazer pergunta. "a pergunta de hoje É os resultados da pesquisa de amanhã"
Vaulstein

Respostas:

220
var d = new Date("2011-04-20T09:30:51.01");
d.getHours(); // => 9
d.getMinutes(); // =>  30
d.getSeconds(); // => 51

ou

var d = new Date(); // for now
d.getHours(); // => 9
d.getMinutes(); // =>  30
d.getSeconds(); // => 51
Royi Namir
fonte
1
var d = new Date("2011-04-20 09:30:51.01"); alert(d.getHours()); // => 9 saídaNaN
Chinmay235
1
@ Chinmay235 Adicionado T então agora é o iso universal certo. BTW eu só vejo undefinedno IE. Enfim fixo.
Royi Namir
126

Curto e simples:

new Date().toLocaleTimeString(); // 11:18:48 AM
//---
new Date().toLocaleDateString(); // 11/16/2015
//---
new Date().toLocaleString(); // 11/16/2015, 11:18:48 PM

4 horas depois (use milisec: seg == 1000):

new Date(new Date().getTime() + 4*60*60*1000).toLocaleTimeString(); // 3:18:48 PM or 15:18:48

2 dias antes:

new Date(new Date().getTime() - 2*24*60*60*1000).toLocaleDateString() // 11/14/2015
zombar
fonte
6
O cálculo da adição e subtração é útil!
Dov Miller
Para o que eu precisaria alterá-lo se quisesse adicionar 1 minuto?
fácil
80

Obtenha e defina a hora atual com eficiência usando javascript

Não consegui encontrar uma solução que fizesse exatamente o que eu precisava. Eu queria um código limpo e minúsculo, então vim com isso:

(Defina uma vez no master.js e invoque quando necessário.)

JAVASCRIPT PURO

function timeNow(i) {
  var d = new Date(),
    h = (d.getHours()<10?'0':'') + d.getHours(),
    m = (d.getMinutes()<10?'0':'') + d.getMinutes();
  i.value = h + ':' + m;
}
<a onclick="timeNow(test1)" href="#">SET TIME</a>
<input id="test1" type="time" value="10:40" />


ATUALIZAR

Agora há suporte suficiente ao navegador para simplesmente usar: toLocaleTimeString

Para o tipo html5,time o formato deve ser hh:mm.

function timeNow(i) {
  i.value = new Date().toLocaleTimeString([], {hour: '2-digit', minute:'2-digit'});
}
<a onclick="timeNow(test1)" href="#">SET TIME</a>
<input id="test1" type="time" value="10:40" />

Try it on jsfiddle

DreamTeK
fonte
3
@ gcoleman0828 Eu estava atrasado para a festa. Obrigado pela votação :)
DreamTeK
... Você digitou 'get' como 'set'? Caso contrário, sua resposta não corresponde ao seu título e seu título não corresponde à pergunta.
Fund Monica's Lawsuit
@QPaysTaxes Minha resposta faz as duas coisas. O javascript obtém a hora e o html mostra ao usuário como o código pode ser usado para definir a hora também, se necessário. Atualizei minha resposta para refletir isso. Obrigado por apontar isso.
DreamTeK
o tempo está aparecendo 30 minutos para mim, se eu clicar em Definir hora, está correto, mas no horário militar. Tempo definido deve ser de alternância acho que isso não funciona
ciasto Piekarz
O toLocaleTime terá um formato diferente, dependendo da localidade do navegador. Em vez disso, você pode usar uma localidade fixa sem PM / AM, como fr, para obter um horário correspondente ao formato de horário html5new Date().toLocaleTimeString('fr', {hour: '2-digit', minute:'2-digit'});
Tofandel
24

Experimentar

new Date().toLocaleTimeString().replace("/.*(\d{2}:\d{2}:\d{2}).*/", "$1");

Ou

new Date().toTimeString().split(" ")[0];
Fernando Gomes
fonte
No segundo formulário, se você usar apenas toString () e alterar o 0 para 4, também obterá a hora no formato HH: MM: SS.
BigMac66
9

Você quer dizer:

var d = new Date();
var curr_hour = d.getHours();
var curr_min = d.getMinutes();
Sudhir Bastakoti
fonte
8

const date = Date().slice(16,21);
console.log(date);

Parmeet Singh
fonte
6

Tente o seguinte:

var date = new Date();
var hour = date.getHours();
var min = date.getMinutes();
StoicFnord
fonte
5
function getCurrentTime(){
    var date = new Date();
    var hh = date.getHours();
    var mm = date.getMinutes();

    hh = hh < 10 ? '0'+hh : hh; 
    mm = mm < 10 ? '0'+mm : mm;

    curr_time = hh+':'+mm;
    return curr_time;
}
Hamfri
fonte
Se tudo o que você precisa é de um tempo sem segundos e não precisa das partes PM ou AM, o código acima deve funcionar perfeitamente.
Hamfri
3

É assim que você pode fazer.

const date = new Date();
const time = date.toTimeString().split(' ')[0].split(':');
console.log(time[0] + ':' + time[1])

Parvez Rahaman
fonte
1
Isso não é menos enigmático ou melhor do que new Date().toTimeString().slice(0, 5).
Dan Dascalescu 5/05/19
1
@DanDascalescu Como desenvolvedor Python (principalmente), eu aprecio o one-liner enigmático que você forneceu e não teria rolado o suficiente na página para ver a resposta concisa do Parmeet Singh (à qual suponho que você estivesse se referindo). Obrigado!
Jason R Stevens CFA
2

esta -

var x = new Date(); 
var h = x.getHours(); 
var m = x.getMinutes(); 
var s = x.getSeconds(); 

tão-

 x = date
h = hours
m = mins
s = seconds
Vibhaas Srivastava
fonte
1

Você pode simplesmente usar esses métodos.

console.log(new Date().toLocaleTimeString([], { hour: '2-digit', minute: "2-digit", hour12: false }));
console.log(new Date().toLocaleTimeString([], { hour: '2-digit', minute: "2-digit" }));

Omer Farad
fonte
0

Este é o caminho mais curto.

var now = new Date().toLocaleTimeString();
console.log(now)

Aqui também está um caminho através da manipulação de strings que não foi mencionado.

var now = new Date()
console.log(now.toString().substr(16,8))

fonte
O mais curto é Date().substr(16, 5). Você não precisa toString().
Dan Dascalescu 5/05/19
0

Atribua a variáveis ​​e exiba-o.

time = new Date();

var hh = time.getHours();
var mm = time.getMinutes();
var ss = time.getSeconds() 

document.getElementById("time").value = hh + ":" + mm + ":" + ss;
mhtmalpani
fonte
Por que assumir que isso precisa ser armazenado em um timeelemento? O OP solicitou o armazenamento em uma variável e apenas por uma hora e um minuto. let time = Date().substr(16, 5)faz isso.
Dan Dascalescu 5/05/19
0

Funções simples para separar Data e Hora e com formato compatível com entrada HTML de Hora e Data

function formatDate(date) {
  var d         = new Date(date),
      month = '' + (d.getMonth() + 1),
      day   = '' + d.getDate(),
      year  = d.getFullYear();

  if (month.length < 2) month = '0' + month;
  if (day.length < 2) day = '0' + day;

  return [year, month, day].join('-');
}

function formatTime(date) {
        var hours   = new Date().getHours() > 9 ? new Date().getHours() : '0' + new Date().getHours()
        var minutes = new Date().getMinutes() > 9 ? new Date().getMinutes() : '0' + new Date().getMinutes()

        return hours + ':' + minutes
}
AbdessamadEL
fonte
-1
var today = new Date();  //gets current date and time
var hour = today.getHours();         
var minute = today.getMinutes();
var second = today.getSeconds();
Saurabh Agarwal
fonte
1
Como isso adiciona algo às respostas existentes? O principal problema foi a ausência de new.
RomainValeri
-2

Isso funcionou para mim, mas isso depende do que você obtém quando pressiona Date():

Date().slice(16,-12)
Luffy
fonte
Este parece idêntico a uma resposta existente: stackoverflow.com/a/46599746/3294944
stealththeninja
@ stealththeninja: não é idêntico. Isso despeja o segundo e o fuso horário também.
Dan Dascalescu 5/05/19
-3
var hours = date.getHours();
        var minutes = date.getMinutes();
        var ampm = hours >= 12 ? 'pm' : 'am';
        hours = hours % 12;
        hours = hours ? hours : 12; // the hour '0' should be '12'
        minutes = minutes < 10 ? '0'+minutes : minutes;
        var strTime = hours + ':' + minutes + ' ' + ampm;
        console.log(strTime);
        $scope.time = strTime;

        date.setDate(date.getDate()+1);
        month = '' + (date.getMonth() + 1),
        day = '' + date.getDate(1),
        year = date.getFullYear();
        if (month.length < 2) month = '0' + month;
        if (day.length < 2) day = '0' + day;
        var tomorrow = [year, month, day].join('-');
        $scope.tomorrow = tomorrow;
user9720939
fonte