ruby - 用 Ruby 计算日期

标签 ruby date

我有一些特定的功能来测试日期。我遇到了绊脚石。我需要从今天开始回溯 14 天以生成日期,但必须忽略周末。

例子:

今天是星期一,倒退 1 天将带我到星期五。回去 2 天会带我到星期四。我们总是落后两天。因此,当我在星期二着陆时,需要转到星期五和星期一到星期四。我让它工作了 1 周,但接下来的 7 天它又开始了相同的循环。

这是我目前所拥有的:

def date_calc_minus(number)


date = Date.today - number.to_i
  day = date.strftime('%a %e %B %Y').split(' ')[0]


  case
    when day.include?('Sun')
      puts day
      calculated_date = date - 2
    when day.include?('Sat')
      puts day
      calculated_date = date - 2
    else
      puts day
      calculated_date = date - 2
      if calculated_date.strftime('%a %e %B %Y').split(' ')[0].include?('Sun')
        calculated_date = calculated_date - 2
      elsif calculated_date.strftime('%a %e %B %Y').split(' ')[0].include?('Sat')
        calculated_date = calculated_date - 2
      end
  end

  calculated_date.strftime('%a %e %B %Y')
end

start = 1
stop = 14
range = start.to_i.upto(stop.to_i).to_a

range.each_with_index do |number, index|
  puts date_calc_minus(number)
end


#=>



Sun
Fri 27 April 2018
Sat
Thu 26 April 2018
Fri
Wed 25 April 2018
Thu
Tue 24 April 2018
Wed
Mon 23 April 2018
Tue
Fri 20 April 2018
Mon
Thu 19 April 2018
Sun
Fri 20 April 2018
Sat
Thu 19 April 2018
Fri
Wed 18 April 2018
Thu
Tue 17 April 2018
Wed
Mon 16 April 2018
Tue
Fri 13 April 2018
Mon
Thu 12 April 2018

我知道这不是很漂亮,但我看它的时间太长了,我的目光变得狭隘了。有没有一种简单的方法可以实现这一目标?

最佳答案

请注意使用 sunday? 方法来确定某个日期是否恰好是星期日。

require "date"
def date_calc_minus(number)
  d = Date.today
  number.times do
    d -= 1
    d -= 2 if d.sunday?
  end
  d
end

关于ruby - 用 Ruby 计算日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50100357/

相关文章:

sql - 计算两个日期之间的工作日

shell - system() 产生不一致的结果

ruby - 标记未使用的 block 变量

Python:具有开始日期和结束日期的数据框,解压缩到 1 个日期字段

javascript - 在 JavaScript 中格式化日期字符串

ruby - 在服务器上更改 Time.now 以返回不同的时区

ruby - 使用 Ruby 的 .days.ago 进行比较似乎使用了反向逻辑

ruby - 试图理解 Ruby .chr 和 .ord 方法

css - SASS 中 undefined variable ,即使上面定义了该变量

ruby - 你如何在 Redis 中设置一个 boolean 值?