【问题标题】:Check if the value is in range between closest array's elements. (ruby)检查该值是否在最近数组元素之间的范围内。 (红宝石)
【发布时间】:2015-11-24 08:45:53
【问题描述】:

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

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

例如,我的给定值是 2015-11-11。我应该如何检查它是否是这几周的日期之一?感谢您的帮助。

【问题讨论】:

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


    【解决方案1】:
    %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 为您提供今天的日期。

    您可以使用'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 同一周的所有记录的关系。

    【讨论】:

    • 我认为这正是我所需要的。一个问题是我需要检查年是否也等于,而不仅仅是几周。 :) 但谢谢。我会以某种方式想到如何检查日期的年份是否相等:)
    • 你只要问日期:'2015-11-11'.to_date.year
    • 我在答案中添加了几个链接,您可以在其中找到有关 Date 方法的更多信息。
    • 谢谢,如果这个想法对我有用,请检查它作为我问题的答案
    • 我有一个问题,因为我的日期检查值是从数据库中选择的,我不能使用这些方法 to_date 或 cweek 因为我得到一个错误。我尝试使用 DATETIME 来玩 to_date 格式,然后使用 cweek。但它转换为字符串,我不能使用 cweek 方法。任何想法我应该如何解决它?
    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      例如,假设列表是 [date_0, date_1, date_2, ..., date_k](相隔 1 周),并且您的 test_date 介于 date_0 和 date_k 之间。然后 (test_date.jd - date_0.jd)/7 为您提供列表中

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-14
        • 2017-04-01
        • 2011-02-04
        • 2018-08-04
        • 2018-02-12
        相关资源
        最近更新 更多