Digamos que tengo un objeto de fecha y hora, por ejemplo DateTime.now
. Quiero establecer las horas y los minutos en 0 (medianoche). ¿Cómo puedo hacer eso?
104
Gracias a ActiveSupport puede utilizar:
DateTime.now.midnight
DateTime.now.beginning_of_day
O
DateTime.now.change({ hour: 0, min: 0, sec: 0 })
# More concisely
DateTime.now.change({ hour: 0 })
now = DateTime.now
DateTime.new(now.year, now.month, now.day, 0, 0, 0, now.zone)
O
now = DateTime.now
DateTime.parse(now.strftime("%Y-%m-%dT00:00:00%z"))
DateTime.new(now.year, now.month, now.day, 0,0,0, now.zone) != now.to_date.to_datetime
No importa, lo tengo. Necesita crear una nueva fecha y hora:
fuente
DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)
funciona.now = DateTime.now
DateTime
. Tendrá problemas molestos si vive en un país que tiene horario de verano como el Reino Unido. Vea una explicación aquí. gist.github.com/pixeltrix/e2298822dd89d854444bAdvertencia :
DateTime.now.midnight
yDateTime.now.beginning_of_day
devuelve el mismo valor (que es la hora cero del día actual; la medianoche no devuelve 24:00:00 como cabría esperar de su nombre).Así que agrego esto como información adicional para cualquiera que pueda usar la respuesta aceptada para calcular la medianoche x días en el futuro.
Por ejemplo, una prueba gratuita de 14 días que debería vencer a la medianoche del día 14:
es la mañana del día 14, lo que equivale a una prueba de 13 días x (x es la parte del día que queda; si ahora es mediodía, entonces es una prueba de 13,5 días).
En realidad, necesitaría hacer esto:
para llegar a la medianoche del día 14.
Por eso siempre prefiero usar
beginning_of_day
, ya que son las 00:00:00. Usar la medianoche puede ser engañoso / malentendido.fuente
Si lo usa con frecuencia, considere instalar esta gema para mejorar el análisis de fechas:
https://github.com/mojombo/chronic
fuente