Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/search/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 返回日期(如果在日期范围内)_Ruby_Date Range - Fatal编程技术网

Ruby 返回日期(如果在日期范围内)

Ruby 返回日期(如果在日期范围内),ruby,date-range,Ruby,Date Range,我有一个包含到期日列表的对象,我正在尝试构建一个系统,当指定日期比到期日早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 =

我有一个包含到期日列表的对象,我正在尝试构建一个系统,当指定日期比到期日早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”格式检查日期是否相等。如果是这样,我在estate对象中通过使用循环中的当前“到期日”与循环中的“当前日期”的年份连接来设置提醒


我对代码不太满意,尤其是嵌套循环,我想知道是否有更好的方法来检查到期日是否在日期范围内,即使到期日没有年份。谢谢

您可以使用日期分析器:

克罗诺斯的例子:

def parse_date(date)
  Kronos.parse(date.sub(/\d{4}$/, ''))
end

此函数为您提供一个没有年份的Kronos对象,该对象更易于比较、生成范围等。

您可以使用日期分析器:

克罗诺斯的例子:

def parse_date(date)
  Kronos.parse(date.sub(/\d{4}$/, ''))
end

此函数为您提供一个没有年份的Kronos对象,它更易于比较、生成范围等。

是的,您可以使用CHRONCE,也可以编写一个worker,它将定期检查指定日期是否比到期日期早1个月或更短。若结果为真,请该员工做些事情(比如,若日期在截止日期内,给你们发一封电子邮件或其他任何东西),你们可以通过谷歌搜索Resque和Redis找到更多关于该员工的信息。另一种选择是在某个基准参考上转换两个日期,然后进行计算。

是的,您可以使用慢性,也可以编写一个worker,定期检查指定日期是否比到期日期早1个月或更短。若结果为真,请该员工做些事情(比如,若日期在截止日期内,给你们发一封电子邮件或其他任何东西),你们可以通过谷歌搜索Resque和Redis找到更多关于该员工的信息。另一种选择是在某个基准引用上转换这两个日期,然后进行计算。

慢性解析器看起来正是我想要的。Thanks@namtax,我对这个问题很感兴趣,你是如何解决它的?慢性解析器看起来正是我想要的。Thanks@namtax,我对这个问题很感兴趣,你是怎么解决的?我想我现在会变成慢性病,但是我想我现在会变成慢性病,但是