Я сам не пробовал, но вы могли бы создать случайное целое число между двумя датами, используя количество секунд с начала эпохи. Например, чтобы получить случайную дату за последнюю неделю.
end = Time.now
start = (end - 1.week).to_i
random_date = Time.at(rand(end.to_i - start)) + start
Конечно, вы получите объект Time вместо DateTime, но я уверен, что вы можете скрыть отсюда.