Powiedzmy, że mam obiekt daty i godziny, np DateTime.now
. Chcę ustawić godziny i minuty na 0 (północ). Jak mogę to zrobić?
104
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:
źródło
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/e2298822dd89d854444bUwaga :
DateTime.now.midnight
iDateTime.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:
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ć:
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.źródło
Jeśli często go używasz, rozważ zainstalowanie tego klejnotu, aby poprawić analizę daty:
https://github.com/mojombo/chronic
źródło