gpt4 book ai didi

ruby-on-rails - Rails 如何检测日期是否连续?

转载 作者:行者123 更新时间:2023-12-03 00:28:58 25 4
gpt4 key购买 nike

我希望检查连续的日期,如果它们是连续的,则以不同的方式显示它们。

我正在与车库销售公司合作,每次销售有多个日期。然后,我想循环遍历每个日期,并将所有连续日期分组以显示为一个组:例如:4 月 28 日 - 4 月 30 日

我还需要考虑非连续日期:例如:4 月 15 日、4 月 28 日至 30 日

此外,每周日期需要被识别为不连续(因此基本上避免步骤检查):例如:4月16日、4月23日、4月30日

<小时/>

到目前为止,我正在记录每个尚未过去的日期并正确排序。

garage_sale_dates.where("date > ?",Time.now).order(:date)

感谢您的帮助!如果需要任何其他信息,请告诉我。

最佳答案

您可以使用slice_before method 可枚举

dates = [Date.yesterday, Date.today, Date.tomorrow, Date.parse('2016-05-01'), Date.parse('2016-05-02'), Date.parse('2016-05-05')]
# => [Wed, 27 Apr 2016, Thu, 28 Apr 2016, Fri, 29 Apr 2016, Sun, 01 May 2016, Mon, 02 May 2016, Thu, 05 May 2016]

prev = dates.first
dates.slice_before { |d| prev, prev2 = d, prev; prev2 + 1.day != d }.to_a
# => [[Wed, 27 Apr 2016, Thu, 28 Apr 2016, Fri, 29 Apr 2016], [Sun, 01 May 2016, Mon, 02 May 2016], [Thu, 05 May 2016]]

然后,您可以简单地将结果中的 2 个或更多元素数组用“-”连接起来,并保持单个元素数组不变:

prev = dates.first
dates.slice_before { |d| prev, prev2 = d, prev; prev2 + 1.day != d }.
map{|d| d.size > 1 ? "#{d.first.to_s} - #{d.last.to_s}" : d.first.to_s }
# => ["2016-04-27 - 2016-04-29", "2016-05-01 - 2016-05-02", "2016-05-05"]

文档中甚至有一个带注释的示例,在技术上与您的示例相同(但处理整数,而不是日期)。

关于ruby-on-rails - Rails 如何检测日期是否连续?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36918476/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com