Powiedzmy, że mam obiekt daty i godziny, np DateTime.now
. Chcę ustawić godziny i minuty na 0 (północ). Jak mogę to zrobić?
Powiedzmy, że mam obiekt daty i godziny, np DateTime.now
. Chcę ustawić godziny i minuty na 0 (północ). Jak mogę to zrobić?
Odpowiedzi:
Dzięki ActiveSupport możesz skorzystać z:
DateTime.now.midnight
DateTime.now.beginning_of_day
LUB
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)
LUB
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
Nieważne, rozumiem. Musisz utworzyć nowy DateTime:
DateTime.new(now.year, now.month, now.day, 0, 0, 0, 0)
DateTime.new(Time.now.year, Time.now.month, Time.now.day, 0, 0, 0)
to działa.
now = DateTime.now
DateTime
. Będziesz mieć irytujące problemy, jeśli mieszkasz w kraju, który ma czas letni, taki jak Wielka Brytania. Zobacz wyjaśnienie tutaj. gist.github.com/pixeltrix/e2298822dd89d854444b
Uwaga : DateTime.now.midnight
i DateTime.now.beginning_of_day
zwróć tę samą wartość (która jest godziną zerową bieżącego dnia - północ nie zwraca 24:00:00, jak można by się spodziewać po jej nazwie).
Więc dodaję to jako dalsze informacje dla każdego, kto mógłby użyć zaakceptowanej odpowiedzi do obliczenia północy x dni w przyszłości.
Na przykład 14-dniowy bezpłatny okres próbny, który powinien wygasnąć o północy 14 dnia:
DateTime.now.midnight + 14.days
jest poranek 14 dnia, co odpowiada 13.x dniowej próbie (x to pozostała część dnia - jeśli teraz jest południe, to jest to 13,5-dniowy okres próbny).
Właściwie musiałbyś to zrobić:
DateTime.now.midnight + 15.days
aby uzyskać północ 14 dnia.
Z tego powodu zawsze wolę używać beginning_of_day
, ponieważ jest to 00:00:00. Korzystanie z północy może być mylące / niezrozumiane.
Jeśli często go używasz, rozważ zainstalowanie tego klejnotu, aby poprawić analizę daty:
https://github.com/mojombo/chronic
require 'chronic'
Chronic.parse('this 0:00')