Railsy DateTime.now bez czasu

92

Muszę użyć DateTime.now, aby pobrać aktualną datę i „usunąć” godzinę.

Na przykład pokazuje to, czego nie chcę:DateTime.now => Sat, 19 Nov 2011 18:54:13 UTC +00:00

To pokazuje, co mam robić chcą:DateTime.now.some_operation => 2011-11-06 00:00:00 UTC

Mikrofon
źródło
11
DateTime bez Time to Date :) czy masz na myśli Date.today?
ajahongir

Odpowiedzi:

177

Możesz użyć jednego z następujących:

  • DateTime.current.midnight
  • DateTime.current.beginning_of_day
  • DateTime.current.to_date
Igor Kapkov
źródło
@sekmo Starting_of_day jest częścią pakietu activesupport (szyny).
Igor Kapkov
5
Lepiej nie używać DateTime.nowbez strefy. Lepiej użyć jednej z 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_fzamiast.
Bryan Dimas
dzięki @BryanDimas, twój komentarz pomaga. Czy VPN może wpłynąć na zmianę adresu IP na inne kraje?
Jenuel Ganawed
21

Potrzebujesz funkcji strftime:

Time.now.strftime("%Y-%d-%m %H:%M:%S %Z")
Wiceprezes.
źródło
Może to powodować poważne problemy, jeśli wstawiasz dane do bazy danych, która oczekuje %Y-%m-%d %H:%M:%Ssformatowanych danych, ponieważ spowoduje to odwrócenie wartości miesiąca i dnia
quetzaluz
Moją propozycją było użycie funkcji strftime, używanego formatu musisz odpowiednio dostosować
VP.
9

O co chodzi Date.today.to_time?

Ernesto
źródło
4

Jeśli chcesz require 'active_support/core_ext', możesz użyć

DateTime.now.midnight # => Sat, 19 Nov 2011 00:00:00 -0800
Jon M
źródło
1
Właśnie zauważyłem ruby-on-rails tag, więc myślę, że ty jesteś szczęśliwy wymagać ActiveSupport :)
Jon M
4

Możesz użyć tylko:

Date.current
Evan Ross
źródło
1

Jeśli chcesz mieć dzisiejszą datę bez godziny, po prostu użyj Date.today

LordKiz
źródło
0

Domyśliłam się. To działa:

DateTime.now.in_time_zone.midnight
Mikrofon
źródło