簡體   English   中英

檢查該值是否在最近的數組元素之間。 (紅寶石)

[英]Check if the value is in range between closest array's elements. (ruby)

我需要知道如何檢查給定的值是否在兩個最接近的數組成員之間。 例如,我有一個日期數組,其中星期幾在給定的時間段內開始。 而且我需要檢查給定的日期是否在一周中的某一天。 例如:

  1. 2015-11-02
  2. 2015-11-09
  3. 2015-11-16
  4. 2015-11-23

我給定的值是2015-11-11。 我應該如何檢查是否是這幾周的日期之一? 感謝幫助。

%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?字符串any? 遍歷它並檢查是否滿足要求,然后將日期字符串轉換為實際日期,而cweek則為您提供一年中的星期數。 Date.today給您今天的日期。

您可以使用'2015-11-11'.to_date.cweek代替Date.today.cweek

上面的循環返回布爾值; 您還可以獲得滿足以下條件的值數組:

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同一周的所有記錄的關系。

假設您的日期數組已排序:

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

如果要處理字符串,則可以“需要'date'”並將字符串轉換為日期(“ 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為您提供列表中日期的索引,即<= test_date。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM