ruby - 在 Ruby 中返回日期范围内的字符串

标签 ruby date

我正在编写一个脚本,该脚本查看一组文件,检查它们是否在“@due”标记内有任何行,后跟日期范围,然后获取这些行并将它们打印到一个单独的文件。 (基本上,我有一组文本文件,其中包含带有截止日期的项目,我想要一份每日概要,说明已过期、今天到期以及接下来 4 天内到期的内容。)

现在,我正在用钝力做这件事:

tom1 = (Time.now + 86400).strftime('%Y-%m-%d')
tom2 = (Time.now + (86400 * 2)).strftime('%Y-%m-%d')
tom3 = (Time.now + (86400 * 3)).strftime('%Y-%m-%d')

等等,然后:

if line =~ /@due\(#{tom1}\)/
found_completed = true
project += line.gsub(/@due\(.*?\)/,'').strip + " **1 day**" + "\n" + "\t"
end

if line =~ /@due\(#{tom2}\)/
found_completed = true
project += line.gsub(/@due\(.*?\)/,'').strip + " **2 days**" + "\n" + "\t"
end

等等。等等

我在过去 30 天、今天和 future 4 天都这样做。我在想,如果没有更优雅的方法来做到这一点,也许我需要“日期”而不是“时间”,然后设置某种范围。

谢谢!

最佳答案

我相信这会奏效,或者轻度按摩会奏效。我在极少数日期对其进行了测试,并且对他们有效。运行脚本时,确保通过命令行将日期作为 YYYY-MM-DD 传递。我写到控制台而不是另一个文件只是为了我可以更容易地检查测试值。如果您的文件中的一行没有格式正确的日期值,我会使用 begin-rescue block 。

require 'date'

def due(due_dates)
    due_dates.each do |x|
        puts x
    end
end

today = Date.parse(ARGV.shift)

f = File.readlines('path_to_file')

due_today = []
due_within_four = []
past_due = []
f.each do |line|
    begin
        d = Date.parse(line)
        due_today << line if d == today
        due_within_four << line if (today+1..today+4).cover? d
        past_due << line if (today-30..today-1).cover? d
    rescue 
        next
    end
end

puts "DUE TODAY"
due(due_today)

puts "\nDUE WITHIN FOUR DAYS"
due(due_within_four)

puts "\nOVERDUE"
due(past_due)

关于ruby - 在 Ruby 中返回日期范围内的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17073515/

相关文章:

ruby-on-rails - 在 Rails 6.1 上使用咖啡装载机时出现 `this.getOptions is not a function` 错误

ruby-on-rails - 将业务规则移动到模型中

php - 将 PHP 日期转换为 Excel?

php - 从维度数组计算相同日期值

javascript - 聊天在服务器和客户端的 Date.now() 中存在差异

ruby-on-rails - ubuntu 14.04 上 passenger-install-nginx-module 的 Bundler 错误

ruby-on-rails - 如何模拟服务对象?我应该 mock 它吗?

python - 为什么负数在求平方时常常需要括号才能得到预期的结果?

r - 在 R 中将日期转换为特定格式的字符

linux - 如何手动更改linux系统时间?