如何在Ruby中创建随机日期[已关闭]

tp5buhyn  于 2023-04-20  发布在  Ruby
关注(0)|答案(2)|浏览(91)

已关闭,此问题需要更focused,目前不接受回答。
**要改进此问题吗?**更新问题,使其仅关注editing this post的一个问题。

8天前关闭
Improve this question
我想创建一个方法来生成一个随机的日期,范围是输入日期之前的10天和之后的5天。我如何在ruby上正确地编写它?
我试着在ruby文档中寻找答案,也试着在这个网站上寻找答案,但一无所获。

vom3gejh

vom3gejh1#

首先,让我们写一个方法,它为给定的日期创建随机日期,然后我们将今天的日期作为输入

require 'date'

def random_date(input_date)
  start_date = input_date - 10
  end_date = input_date + 5
  days_between = (end_date - start_date).to_i
  random_offset = rand(days_between + 1)
  return start_date + random_offset
end

input_date = Date.today
random_date = random_date(input_date)
puts random_date.strftime("%Y-%m-%d")

或者,您可以使用Time.at()方法,如下所示

def random_date(input_date)
  start_time = (input_date - 10).to_time.to_i
  end_time = (input_date + 5).to_time.to_i
  random_time = rand(start_time..end_time)
  return Time.at(random_time).to_date
end

输出

2023-04-07
p5cysglq

p5cysglq2#

您可以指定范围,然后选择一些样本日期

require 'date'

today = Date.today
today + rand(-10..5)

如果输入日期是字符串-像这样解析它

date = Date.parse('2023-12-12')

或者用某种方法

def random_date(date, before_days: 0, after_days: 0)
  date = Date.parse(date) unless date.is_a?(Date)
  date + rand(-before_days..after_days)
end

random_date(Date.today)
# => #<Date: 2023-04-11 ((2460046j,0s,0n),+0s,2299161j)>

random_date('2023-12-12', before_days: 5, after_days: 10)
# => #<Date: 2023-12-08 ((2460287j,0s,0n),+0s,2299161j)>

相关问题