首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >group_by相对日期范围

group_by相对日期范围
EN

Stack Overflow用户
提问于 2011-07-13 01:50:38
回答 4查看 1.2K关注 0票数 2

我有一个客户,她想要看到她的员工的报告,按他们上一个职位的日期分组(date_in_position)。她希望将它们分组:不到1年,1-3年,3-5年,以及5年以上。我创建了一个小方法来返回一个可用于group_by方法的字符串,但只有“小于1年”才能正常工作。其他一切都显示为超过5年。

代码语言:javascript
复制
def dip_range
  case self.date_in_position
    when 1.year.ago...Date.today
      '< 1 year'
    when 3.years.ago...(1.year.ago + 1)
      '1-3 years'
    when 5.years.ago...(3.years.ago + 1)
      '3-5 years'
    else 
      '> 5 years'
  end
end
EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-07-13 02:28:55

另一种方法是:

代码语言:javascript
复制
def dip_range
  case
    when self.date_in_position.between?(1.year.ago,Date.today)
      '< 1 year'
    when self.date_in_position.between?(3.years.ago,(1.year.ago + 1))
      '1-3 years'
    when self.date_in_position.between?(5.years.ago,(3.years.ago + 1))
      '3-5 years'
    else 
      '> 5 years'
  end
end
票数 4
EN

Stack Overflow用户

发布于 2011-07-13 02:23:15

在R1.8 (Time..Date)范围内根本不能工作,而且我无论如何都会重写这段代码:

代码语言:javascript
复制
# self is not required by the way
case (Date.today - date_in_position) / 365.2425 
when (0...1)
  '< 1 year'
when (1...3)
  '< 3 years'
when (3...5)
  '< 5 years'
else
  '> 5 year'
end

或者甚至是:

代码语言:javascript
复制
years = (Date.today - date_in_position) / 365.2425
case  
when years < 1
  '< 1 year'
when years < 3
  '< 3 years'
when years < 5
  '< 5 years'
else
  '> 5 year'
end
票数 2
EN

Stack Overflow用户

发布于 2011-07-13 02:08:38

Integer#years.ago返回一个DateTime,它没有正确地与您正在打开的Date对象进行比较。我不太确定为什么会这样,但如果你改变

代码语言:javascript
复制
case self.date_in_position

to case self.date_in_position.to_datetime

这段代码适用于大多数情况。

此外,您的边界是不正确的。如果某人在1年前的今天开始工作,他们应该显示为1-3年,对吗?所以:

代码语言:javascript
复制
def dip_range
  case self.date_in_position
    when (1.year.ago+1.day).to_date..Date.today
      '< 1 year'
    when (3.years.ago+1.day).to_date..1.year.ago.to_date
      '1-3 years'
    when (5.years.ago.to_date+1.day).to_date..3.years.ago.to_date
      '3-5 years'
    else 
      '> 5 years'
  end
end
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6668707

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档