Скажімо, у мене є об'єкт дати, наприклад DateTime.now
. Я хочу встановити години та хвилини на 0 (опівночі). Як я можу це зробити?
Скажімо, у мене є об'єкт дати, наприклад DateTime.now
. Я хочу встановити години та хвилини на 0 (опівночі). Як я можу це зробити?
Відповіді:
Завдяки ActiveSupport ви можете використовувати:
DateTime.now.midnight
DateTime.now.beginning_of_day
АБО
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)
АБО
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
Не забудьте, зрозумів. Потрібно створити новий 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)
це працює.
now = DateTime.now
DateTime
. У вас з’являться дратівливі проблеми, якщо ви живете в країні, де літній час, як Великобританія. Дивіться пояснення тут. gist.github.com/pixeltrix/e2298822dd89d854444b
Попередження : DateTime.now.midnight
і DateTime.now.beginning_of_day
поверніть те саме значення (яке дорівнює нульовій годині поточного дня - опівночі не повертається 24:00:00, як ви очікували від його назви).
Тож я додаю це як додаткову інформацію для тих, хто може використати прийняту відповідь для обчислення півночі х днів у майбутньому.
Наприклад, 14-денний безкоштовний пробний термін, який повинен закінчитися опівночі 14-го дня:
DateTime.now.midnight + 14.days
- це ранок 14-го дня, що дорівнює випробуванню 13-денного дня (х - частина залишитого дня - якщо зараз опівдні, то це випробування 13,5 дня).
Вам фактично потрібно було б це зробити:
DateTime.now.midnight + 15.days
щоб отримати півночі 14-го дня.
З цієї причини я завжди вважаю за краще використовувати beginning_of_day
, оскільки це 00:00:00. Використання опівночі може ввести в оману / неправильно зрозуміти.
Якщо ви використовуєте його, часто рекомендується встановити цей дорогоцінний камінь, щоб поліпшити розбір дати:
https://github.com/mojombo/chronic
require 'chronic'
Chronic.parse('this 0:00')