Digamos que eu tenha um objeto datetime, por exemplo DateTime.now
. Quero definir horas e minutos como 0 (meia-noite). Como eu posso fazer isso?
104
Graças ao ActiveSupport você pode usar:
DateTime.now.midnight
DateTime.now.beginning_of_day
OU
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)
OU
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
Esqueça, entendi. É necessário criar um novo DateTime:
fonte
DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)
funciona.now = DateTime.now
DateTime
. Você terá problemas irritantes se morar em um país que tem horário de verão, como o Reino Unido. Veja uma explicação aqui. gist.github.com/pixeltrix/e2298822dd89d854444bAviso :
DateTime.now.midnight
eDateTime.now.beginning_of_day
retorna o mesmo valor (que é a hora zero do dia atual - meia-noite não retorna 24:00:00 como você esperaria de seu nome).Portanto, estou adicionando isso como mais informações para qualquer um que possa usar a resposta aceita para calcular meia-noite x dias no futuro.
Por exemplo, uma avaliação gratuita de 14 dias que deve expirar à meia-noite do 14º dia:
é a manhã do 14º dia, o que equivale a um teste de 13.x dias (x é a parte do dia restante - se agora é meio-dia, então é um teste de 13,5 dias).
Você realmente precisaria fazer isso:
para chegar à meia-noite do 14º dia.
Por isso prefiro sempre usar
beginning_of_day
, já que é 00:00:00. Usar meia-noite pode ser enganoso / mal interpretado.fonte
Se você o usa com frequência, considere instalar esta gema para melhorar a análise de data:
https://github.com/mojombo/chronic
fonte