たとえば、datetimeオブジェクトがあるとしますDateTime.now
。時間と分を0(真夜中)に設定します。どうやってやるの?
たとえば、datetimeオブジェクトがあるとします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を返しません)。
だから、私はこれを、受け入れられた回答を使用して将来の真夜中x日を計算する可能性がある人のための詳細情報として追加します。
たとえば、14日目の真夜中に期限切れになる14日間の無料トライアル:
DateTime.now.midnight + 14.days
14日目の朝です。これは13.x日トライアルに相当します(xは残りの日の一部です。今が正午である場合、13.5日トライアルです)。
実際にこれを行う必要があります:
DateTime.now.midnight + 15.days
14日目は真夜中です。
このため、私は常にbeginning_of_day
00:00:00なので、を使用することを好みます。真夜中を使用すると、誤解を招く/誤解される可能性があります。
頻繁に使用する場合は、このgemをインストールして日付の解析を改善することを検討してください。
https://github.com/mojombo/chronic
require 'chronic'
Chronic.parse('this 0:00')