假设我有一个日期时间对象,例如DateTime.now.我想将小时和分钟设置为0(午夜).我怎样才能做到这一点?
ash*_*oda 206
感谢ActiveSupport,您可以使用:
DateTime.now.midnight
DateTime.now.beginning_of_day
Run Code Online (Sandbox Code Playgroud)
要么
DateTime.now.change({ hour: 0, min: 0, sec: 0 })
# More concisely
DateTime.now.change({ hour: 0 })
Run Code Online (Sandbox Code Playgroud)
now = DateTime.now
DateTime.new(now.year, now.month, now.day, 0, 0, 0, now.zone)
Run Code Online (Sandbox Code Playgroud)
要么
now = DateTime.now
DateTime.parse(now.strftime("%Y-%m-%dT00:00:00%z"))
Run Code Online (Sandbox Code Playgroud)
Jes*_*dge 34
没关系,明白了.需要创建一个新的DateTime:
DateTime.new(now.year, now.month, now.day, 0, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)
警告:DateTime.now.midnight并DateTime.now.beginning_of_day返回相同的值(这是当天的零时 - 午夜不会像您从其名称中期望的那样返回 24:00:00)。
因此,我将此添加为任何可能使用已接受答案来计算未来午夜 x 天的人的进一步信息。
例如,应在第 14 天午夜到期的 14 天免费试用:
DateTime.now.midnight + 14.days
Run Code Online (Sandbox Code Playgroud)
是第 14 天的早晨,相当于 13.x 天的试用期(x 是当天剩余的部分 - 如果现在是中午,则是 13.5 天的试用期)。
你实际上需要这样做:
DateTime.now.midnight + 15.days
Run Code Online (Sandbox Code Playgroud)
到第 14 天的午夜。
出于这个原因,我总是喜欢使用beginning_of_day,因为那是 00:00:00。使用午夜可能会产生误导/误解。