检查值是否在最接近的数组元素之间的范围内。 (红宝石)

时间:2015-11-24 08:45:54

标签: ruby-on-rails arrays ruby algorithm date

我需要知道如何检查我的给定值是否在两个最接近的数组成员之间。例如,我有一系列日期,其中包含在给定时间段内开始的星期日期。我需要检查我的给定日期是否在其中一周内。例如:

  1. 2015-11-02
  2. 2015-11-09
  3. 2015-11-16
  4. 2015年11月23日
  5. 我的给定值是2015-11-11。我应该如何查看这些周的日期之一?谢谢你的帮助。

3 个答案:

答案 0 :(得分:0)

%w(2015-11-02 2015-11-09 2015-11-16 2015-11-23).any? do |date| 
  date.to_date.cweek == Date.today.cweek
end

以下是这样做的: 首先,你有一个字符串数组,你使用any?循环遍历它并检查是否满足要求,然后你将日期字符串转换为实际日期,而cweek给你一年中一周的数字。 Date.today为您提供今天的约会。

而不是Date.today.cweek,您可以使用'2015-11-11'.to_date.cweek

上面的循环返回boolean;您还可以获得满足以下条件的值数组:

new_array = %w(2015-11-02 2015-11-09 2015-11-16 2015-11-23).map do |date| 
  date.to_date.cweek == '2015-11-11'.to_date.cweek
end.compact

资源:

更新

如果您想从数据库中仅获取具有特定星期日期的记录,您可以这样做:

my_date = '2015-11-11'.to_date
matching_records = MyResource.where( date: my_date.beginning_of_week..my_date.end_of_week )

假设您有一个模型MyResource,并且它有一个列date。这样做会返回与my_date同一周日期的所有记录的关系。

答案 1 :(得分:0)

假设您的日期数组已排序:

date >= dates.first && date <= dates.last

答案 2 :(得分:0)

如果您正在处理字符串,则可以“要求'日期'”并将字符串转换为日期(“Date.parse('2001-02-03')”)。

正如其他人所建议的,您可以查看您的日期是否在列表的第一个和最后一个条目之间。

如果真实列表已排序且每个条目相隔一周,那么您可以轻松找到列表中您的人员所在的位置。

,例如,列表是[date_0,date_1,date_2,...,date_k](相隔1周),并且在date_0和date_k之间给出了test_date。然后(test_date.jd - date_0.jd)/ 7为您提供列表中日期的索引&lt; = test_date。