Rails DateTime.now sem tempo


90

Preciso usar DateTime.now para pegar a data atual e "retirar" a hora.

Por exemplo, isso mostra o que eu não quero:DateTime.now => Sat, 19 Nov 2011 18:54:13 UTC +00:00

Isso mostra o que eu fazer deseja:DateTime.now.some_operation => 2011-11-06 00:00:00 UTC


10
DateTime sem Time é Date :) você quer dizer Date.today?
ajahongir de

Respostas:


173

Você pode usar um dos seguintes:

  • DateTime.current.midnight
  • DateTime.current.beginning_of_day
  • DateTime.current.to_date

@sekmo begin_of_day faz parte do suporte ativo (trilhos).
Igor Kapkov

3
Melhor não usar DateTime.nowsem zona. É melhor usar um dos Time.zone.now, DateTime.current, DateTime.now.in_time_zone, DateTime.now.utc, DateTime.now.getlocal, DateTime.now.iso8601, DateTime.now.jisx0301, DateTime.now.rfc3339, DateTime.now.to_i, DateTime.now.to_fem vez disso.
Bryan Dimas

obrigado @BryanDimas, seu comentário ajuda. A VPN pode afetar, se chaking ip para outros países?
Jenuel Ganawed

19

O que você precisa é da função strftime:

Time.now.strftime("%Y-%d-%m %H:%M:%S %Z")

Isso pode causar problemas significativos se você estiver inserindo dados em um banco de dados que espera %Y-%m-%d %H:%M:%Sdados formatados, pois inverterá o valor do mês e do dia
quetzaluz

Minha proposta era usar a função strftime, o formato usado você tem que se customizar de acordo
VP.


4

Se quiser require 'active_support/core_ext', você pode usar

DateTime.now.midnight # => Sat, 19 Nov 2011 00:00:00 -0800

1
Acabei de notar a tag ruby-on-rails, então acho que você está feliz em exigir o ActiveSupport :)
Jon M


1

Se você quiser a data de hoje sem a hora, basta usar Date.today


0

Descobri isso. Isso funciona:

DateTime.now.in_time_zone.midnight
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.