Respostas:
O setHours
método pode levar opcional minutes
, seconds
e ms
argumentos, por exemplo:
var d = new Date();
d.setHours(0,0,0,0);
Isso definirá a hora 00:00:00.000
do seu fuso horário atual . Se você quiser trabalhar no horário UTC, poderá usar o setUTCHours
método
new Date(new Date().setHours(0,0,0,0))
.
Só queria esclarecer que o snippet da resposta aceita fornece a meia-noite mais próxima no passado :
var d = new Date();
d.setHours(0,0,0,0); // last midnight
Se você deseja obter a meia-noite mais próxima no futuro , use o seguinte código:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
Uma linha para configurações de objeto:
new Date(new Date().setHours(0,0,0,0));
Ao criar um elemento:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
Só vou adicionar isso aqui, porque cheguei nesta página procurando como fazer isso no momento.js e outros também.
[Fundamentação da petição : a palavra "momento" já aparece em outro lugar nesta página, para que os mecanismos de pesquisa direcionem aqui e moment.js é amplo o suficiente para garantir que seja coberto com a frequência com que é mencionado em outras perguntas relacionadas à data do SO]
Portanto, na versão 2.0.0 e superior:
date.startOf('day');
Para versões anteriores:
date.sod();
Documentos:
moment(DATE_OBJECT).startOf('day').toDate();
Você provavelmente pode usar
new Date().setUTCHours(0,0,0,0)
se você precisar do valor apenas uma vez.
Adicionando utilidade ao exemplo de @ Dan, tive a necessidade de encontrar o próximo meio-dia ou meia-noite.
var d = new Date();
if(d.getHours() < 12) {
d.setHours(12,0,0,0); // next midnight/midday is midday
} else {
d.setHours(24,0,0,0); // next midnight/midday is midnight
}
Isso me permitiu definir um limite de frequência para um evento, permitindo que isso acontecesse uma vez pela manhã e outra à tarde para qualquer visitante do site. A data capturada foi usada para definir a expiração do cookie.
Se o cálculo com datas no verão, geralmente causará 1 hora a mais ou uma hora a menos que a meia-noite (CEST). Isso causa 1 dia de diferença quando as datas retornam. Portanto, as datas devem arredondar para a meia-noite mais próxima. Portanto, o código será (ths para jamisOn):
var d = new Date();
if(d.getHours() < 12) {
d.setHours(0,0,0,0); // previous midnight day
} else {
d.setHours(24,0,0,0); // next midnight day
}
Eu fiz alguns protótipos para lidar com isso para mim.
// This is a safety check to make sure the prototype is not already defined.
Function.prototype.method = function (name, func) {
if (!this.prototype[name]) {
this.prototype[name] = func;
return this;
}
};
Date.method('endOfDay', function () {
var date = new Date(this);
date.setHours(23, 59, 59, 999);
return date;
});
Date.method('startOfDay', function () {
var date = new Date(this);
date.setHours(0, 0, 0, 0);
return date;
});
se você não quiser a verificação de segurança, poderá usar
Date.prototype.startOfDay = function(){
/*Method body here*/
};
Exemplo de uso:
var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
Caso você já possua o d3.js. como uma dependência em seu projeto, ou não se importe de trazê-lo, o d3-time (a biblioteca do d3.js. é modular a partir da v4.0.0 ) possui Intervalos .
Eles podem ser úteis ao definir datas com valores "padrão", por exemplo, meia-noite, 0,00 segundos, o primeiro do mês etc.
var d = new Date(); // Wed Aug 02 2017 15:01:07 GMT+0200 (CEST)
d3.timeHour(d) // Wed Aug 02 2017 00:00:00 GMT+0200 (CEST)
d3.timeMonth(d) // Tue Aug 01 2017 00:00:00 GMT+0200 (CEST)