2010-10-08 23 views

Respuesta

571

El método setHours puede tomar opcionales minutes, seconds y ms argumentos, por ejemplo:

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

que fijará el tiempo para 00:00:00.000 de su zona horaria actual, si quieres trabajar en tiempo UTC, puede usar el método setUTCHours.

+24

FYI, estoy corriendo este método (d.setHours (0,0,0,0)) en una función de reducir el 270K filas, y es más de 20 segundos más rápido que hacer d.setHours (0); d.setMinutes (0); d.setSeconds (0); ¡Gran respuesta @CMS! – jbnunn

+15

Esto debe hacerse en dos líneas para mantener d como un objeto Date. Recientemente solucioné un error que lo hacía en una línea: var d = new Date(). SetHours (0, 0, 0, 0). Sin embargo, d era entonces un número, no una fecha desde setHours devuelve un número. – Jason

+0

Acabo de enterarme de esto (tarde en la fiesta que conozco), que también necesita una solución de una línea para devolver una Fecha. Para cualquiera que esté buscando esto, la respuesta [@ Zon] (https://stackoverflow.com/questions/3894048/what-is-the-best-way-to-initialize-a-javascript-date-to-midnight#answer- 30100627) funciona perfectamente: 'nueva Fecha (nueva Fecha(). SetHours (0,0,0,0))'. – SRack

135

Sólo quería aclarar que el fragmento de respuesta aceptada da la la medianoche más cercana en el pasado:

var d = new Date(); 
d.setHours(0,0,0,0); // last midnight 

Si desea obtener el la medianoche más cercano en el futuro, utilice el siguiente código:

var d = new Date(); 
d.setHours(24,0,0,0); // next midnignt 
+5

¿Qué sucede si hoy son 25 horas de duración (los relojes se adelantan para el horario de verano)? – qntm

+7

Este es un script del lado del cliente, la medianoche es medianoche, a pesar del horario de verano. También cabe mencionar ... no todos los lugares del mundo usan DST (horario de verano) – chris

+0

@qntm: el cambio de horario de verano siempre se aplica a las 2 a.m. para que sea solo una medianoche durante ese día :). Pero sí, las 3 a.m. pueden suceder dos veces durante el día (facepalm) – Dan

3

Añadiendo utilidad al ejemplo de @ Dan, tuve la necesidad de encontrar el siguiente 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 permitió que fije un límite de frecuencia para un evento, sólo se permite que ocurra una vez por la mañana y otra por la tarde para cualquier visitante de mi sitio. La fecha capturada se usó para establecer el vencimiento de la cookie.

17

Una sola línea de 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)), 
} 
+0

¡Gracias! ¡Me preguntaba cómo puedo hacerlo en una sola línea porque estaba estableciendo una propiedad de objeto! Gran respuesta. –

16

Sólo va a añadir este aquí porque aterricé en esta página buscando la manera de hacer esto en moment.js y otros también pueden hacerlo.

[Justificación: relacionados con la fecha de la palabra "momento" que ya aparece en otra parte en esta página para que los motores de búsqueda dirigir aquí, y moment.js es lo suficientemente amplia como para justificar a ser cubierto pasando la frecuencia con que se menciona en otro SO preguntas]

Así, en la versión 2.0.0 y superiores:

date.startOf('day'); 

Para versiones anteriores:

date.sod(); 

Docs:

http://momentjs.com/docs/#/manipulating/start-of/

+0

para recuperar un objeto de fecha, use este 'momento (DATE_OBJECT) .startOf ('day'). ToDate();' – xinthose

+1

yay, agreguemos una biblioteca de JavaScript de 52kb para hacer algo que puede hacer en 2 líneas. –

+8

¿Y si ya estás usando moment.js por una de las muchas buenas razones por las que podrías ...? ¿Qué hay de leer la lógica que di antes de agregar un comentario sarcástico? – andyhasit

2

Puede utilizar probablemente

new Date().setUTCHours(0,0,0,0) 

si necesita el valor de una sola vez.

+0

Esto no obtiene una instancia de una Fecha, como requiere el OP. – cobberboy

3

Si el cálculo de las fechas en verano causará a menudo 1 uur más o una hora menos que la medianoche (CEST). Esto causa 1 día de diferencia cuando las fechas regresan. Entonces las fechas deben redondearse a la medianoche más cercana.Por lo que el código será (THS a 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 
    } 
-3

    var a = new Array(); 
 
\t \t \t \t \t var b = new Array(); 
 
\t \t \t \t \t var c = new Array(); 
 
\t \t \t \t \t var date = new Date().toJSON(); 
 
\t \t \t \t \t a = date.split("T"); 
 
\t \t \t \t \t a = a[0]; 
 
\t \t \t \t \t b = a.split("-"); 
 
\t \t \t \t \t var currentDate = new Date(b[0],b[1] , b[2] -29 ,-19,30,0).toJSON(); 
 
\t \t \t \t \t c = currentDate.split("."); 
 
\t \t \t \t \t var newDate = c[0]; 
 
console.log(newDate);

+0

Felicitaciones por la creatividad: D –

0

En caso de que ya tienen d3.js como una dependencia en su proyecto, o no les importa poner en , d3-time (d3.js library is modular as of v4.0.0) tiene Intervals.

Pueden ser útiles al establecer las fechas en valores "predeterminados", p. Ej. medianoche, 0.00 segundos, el primer día 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) 
+0

Así que he notado una tendencia en las preguntas relacionadas con JavaScript publicadas en SO: sin importar la complejidad de las soluciones presentadas con JS nativo, cualquier respuesta que aborde el problema con la ayuda de una biblioteca externa inevitablemente Algún punto en el tiempo se derrota. Al darme cuenta de esto, me encargué de publicar mi respuesta con el prefacio rápido: _En caso de que ya tenga example.js como una dependencia_. Y, sin embargo, sigue siendo el usuario de SO anónimo y despreciado. eso duele, tío: '- ( – Peemster

+0

) Caí de que esta respuesta no debería ser rechazada, especialmente porque el que propone el uso de moment.js tiene 16 votos (al momento de escribir este comentario).Resuelve el problema de una manera muy concisa y no tan obvia. – lukeatdesignworks

Cuestiones relacionadas