Преобразование ActiveSupport :: TimeWithZone to DateTime

17

Я пытаюсь выполнить каждый N дней между двумя датами. Я пробовал следующий код, но не работал, потому что startDate и endDate - это объекты ActiveSupport :: TimeWithZone, а не объекты DateTime, как я думал.

startDate.step(endDate, step=7) { |d| puts d.to_s}
  min.step(max, step=stepInt){ |d|
  puts d.to_s  
}

Как скрыть объект TimeWithZone до DateTime?

    
задан Brig 21.12.2010 в 00:17
источник

2 ответа

16

DateTime - это старый класс, который вы обычно хотите избежать. Time и Date - это те, которые вы хотите использовать. ActiveSupport::TimeWithZone действует как Time .

Для перехода по датам вы, вероятно, захотите иметь дело с объектами Date . Вы можете преобразовать Time (или ActiveSupport::TimeWithZone ) в Date с Time#to_date :

from.to_date.step(to.to_date, 7) { |d| puts d.to_s }
    
ответ дан Jason Weathered 21.12.2010 в 03:16
источник
26

Я подумал, что было бы полезно обновить этот ответ, поскольку я недавно искал это. Самый простой способ добиться этого преобразования - использовать функцию .to_datetime ().

например.

5.hours.from_now.class              # => ActiveSupport::TimeWithZone
5.hours.from_now.to_datetime.class  # => DateTime

ref: Ссылка

    
ответ дан Chris A James 05.04.2013 в 01:53
источник