我有一个包含截止日期列表的对象,我正在尝试构建一个系统,该系统在截止日期前1个月或更短的时间内返回截止日期。它应以“2009年2月1日”格式返回到期日。让我澄清一下,使用我目前的代码
#Build array of estate objects
estate.due_dates = "1st Feb, 3rd May, 1st Aug, 5th Nov"
estate2.due_dates = "28th Feb, 31st May, 31st Aug, 30th Nov"
estates = [estate,estate2]
set_due_date_on_estates("1st Jan 2009",estates) #Run function - should return "1st Feb 2009,28th Feb 2009"
def set_due_date_on_estates(date,estates)
estates.each{|estate|
estate.due_dates.split(",").each{|due_date|
((date)..(date >> 1)).each{|current_date|
estate.set_reminder(due_date + current_date.strftime("%Y")) if current_date.strftime('%d %m') ==
Date.parse(due_date).strftime('%d %m')
}
}
end
}
我遇到的问题是,我的截止日期列表没有年份,所以我循环浏览我的范围并使用格式“%d%m”检查日期是否相等。如果是这样的话,我通过在循环中与“当前日期”的年份连接的循环中使用当前的“截止日期”来设置遗产对象中的提醒。
对代码不太满意,特别是嵌套循环,并想知道是否有更好的方法可以处理检查due_dates在日期范围内的位置,即使due_dates没有一年。感谢
答案 0 :(得分:2)
kronos示例:
def parse_date(date)
Kronos.parse(date.sub(/\d{4}$/, ''))
end
这个函数为你提供了一个没有年份的Kronos对象,它更容易比较,构建范围等。
答案 1 :(得分:1)
是的,您可以使用慢性病,并且您也可以编写一名工作人员,该工作人员会定期检查指定日期是否在截止日期前1个月或更短时间。如果结果是真的要求工人做某事(比如说如果日期在截止日期之前给你发电子邮件或其他任何东西)你可以通过谷歌搜索Resque和Redis来找到关于工人的更多信息。另一个选择是在某个基准参考上转换两个日期,然后进行计算。