如何更改时间对象的日期?

时间:2018-04-03 13:45:38

标签: ruby-on-rails ruby

假设我有

> time = Time.zone.now
=> Tue, 03 Apr 2018 09:44:14 EDT -04:00

我想要像

这样的东西
> time.set_date_to(Date.parse("2018-04-13"))
> time
=> Tue, 13 Apr 2018 09:44:14 EDT -04:00

这是否存在?

3 个答案:

答案 0 :(得分:3)

您可以这样做:

time = Time.zone.now.change(year: 2018, month: 4, day: 13)

以下是documentation

答案 1 :(得分:0)

跳出MrShemek的回答我monkeypatched Time

class Time
  def set_date_to(date_or_date_string)
    date = date_or_date_string.is_a?(Date) ? date_or_date_string : Date.parse(date_or_date_string)
    change(year: date.year, month: date.month, day: date.day)
  end
end

这似乎有用

答案 2 :(得分:0)

如果您没有使用Rails项目(或者不想加载active_support),您可以使用Ruby的Date库。

有了它,您可以执行基本时间数学运算,如下所示:

require 'date'

d = Time.now.utc.to_datetime # Datetime preserves time and date information
d.next_day(10)               # same as d + 10
d.prev_day                   # same as d - 1
d.prev_month(2)              # same as d << 2
d.next_month                 # same as d >> 1
d.to_time                    # You can convert back to a Time object if needed. 

DateTime可以处理闰秒/年,但不能处理时区。