Respuestas:
El setHours
método puede tomar opcional minutes
, seconds
y ms
argumentos, por ejemplo:
var d = new Date();
d.setHours(0,0,0,0);
Eso establecerá la hora 00:00:00.000
de su zona horaria actual , si desea trabajar en hora UTC, puede usar el setUTCHours
método.
new Date(new Date().setHours(0,0,0,0))
.
Solo quería aclarar que el fragmento de la respuesta aceptada da la medianoche más cercana en el pasado :
var d = new Date();
d.setHours(0,0,0,0); // last midnight
Si desea obtener la medianoche más cercana en el futuro , use el siguiente código:
var d = new Date();
d.setHours(24,0,0,0); // next midnight
Una línea para configuraciones de objetos:
new Date(new Date().setHours(0,0,0,0));
Al crear un elemento:
dateFieldConfig = {
name: "mydate",
value: new Date(new Date().setHours(0, 0, 0, 0)),
}
Solo voy a agregar esto aquí porque llegué a esta página buscando cómo hacer esto en moment.js y otros también pueden hacerlo.
[Justificación: la palabra "momento" ya aparece en otra parte de esta página, por lo que los motores de búsqueda dirigen aquí, y moment.js está lo suficientemente extendido como para garantizar que se cubra la frecuencia con que se menciona en otras preguntas de SO relacionadas con la fecha]
Entonces, en la versión 2.0.0 y superior:
date.startOf('day');
Para versiones anteriores:
date.sod();
Documentos:
moment(DATE_OBJECT).startOf('day').toDate();
Probablemente puedas usar
new Date().setUTCHours(0,0,0,0)
si necesita el valor solo una vez.
Añadiendo utilidad al ejemplo de @ Dan, tuve la necesidad de encontrar el próximo mediodía o medianoche.
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
}
Esto me permitió establecer un límite de frecuencia para un evento, solo permitiendo que ocurriera una vez por la mañana y otra por la tarde para cualquier visitante de mi sitio. La fecha capturada se usó para establecer la caducidad de la cookie.
Si el cálculo con fechas en verano ocasionará con frecuencia 1 uur más o una hora menos que la medianoche (CEST). Esto causa una diferencia de 1 día cuando regresan las fechas. Entonces las fechas tienen que redondearse a la medianoche más cercana. Entonces el código será (ths to 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
}
He hecho un par de prototipos para manejar esto por mí.
// 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;
});
si no desea el cheque de seguridad, puede usar
Date.prototype.startOfDay = function(){
/*Method body here*/
};
Ejemplo de uso:
var date = new Date($.now()); // $.now() requires jQuery
console.log('startOfDay: ' + date.startOfDay());
console.log('endOfDay: ' + date.endOfDay());
En caso de que ya tenga d3.js como una dependencia en su proyecto, o no le importe incorporarlo, d3-time (la biblioteca d3.js es modular a partir de v4.0.0 ) tiene intervalos .
Pueden resultar útiles al establecer fechas en valores "predeterminados", por ejemplo, medianoche, 0.00 segundos, el primero del mes, 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)