Angenommen, ich habe ein Datum / Uhrzeit-Objekt, z DateTime.now
. Ich möchte Stunden und Minuten auf 0 (Mitternacht) setzen. Wie kann ich das machen?
103
Dank ActiveSupport können Sie Folgendes verwenden:
DateTime.now.midnight
DateTime.now.beginning_of_day
ODER
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)
ODER
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
Vergiss es. Müssen Sie eine neue DateTime erstellen:
quelle
DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)
es funktioniert.now = DateTime.now
DateTime
. Wenn Sie in einem Land mit Sommerzeit wie Großbritannien leben, werden Sie nervige Probleme bekommen. Eine Erklärung finden Sie hier. gist.github.com/pixeltrix/e2298822dd89d854444bWarnung :
DateTime.now.midnight
undDateTime.now.beginning_of_day
geben Sie denselben Wert zurück (dies ist die Nullstunde des aktuellen Tages - Mitternacht gibt nicht 24:00:00 zurück, wie Sie es von seinem Namen erwarten würden).Daher füge ich dies als weitere Information für jeden hinzu, der die akzeptierte Antwort verwenden könnte, um Mitternacht x Tage in der Zukunft zu berechnen.
Beispiel: Eine 14-tägige kostenlose Testversion, die am 14. Tag um Mitternacht abläuft:
ist der Morgen des 14. Tages, was einer 13-tägigen Testversion entspricht (x ist der Teil des verbleibenden Tages - wenn jetzt Mittag ist, ist es eine 13,5-tägige Testversion).
Sie müssten dies tatsächlich tun:
am 14. Tag Mitternacht zu bekommen.
Aus diesem Grund bevorzuge ich immer die Verwendung
beginning_of_day
, da dies 00:00:00 ist. Die Verwendung von Mitternacht kann irreführend / missverstanden sein.quelle
Wenn Sie es häufig verwenden, sollten Sie dieses Juwel installieren, um die Datumsanalyse zu verbessern:
https://github.com/mojombo/chronic
quelle