Ответ 1
Дата немного сложнее работать, вы должны использовать Time. Попробуйте преобразовать даты в Times:
require 'time'
foo_time = Time.parse(foo.to_s)
bar_time = Time.parse(bar.to_s)
Преобразуйте их в метки времени, затем вычислите среднее значение, а затем вернитесь к Time:
avg = Time.at((foo_time.to_f + bar_time.to_f) / 2)
Вы можете преобразовать его в Date:
avg_date = Date.parse(avg.to_s)