查找不同的日期

时间:2012-01-12 22:21:29

标签: ruby datetime

我有一个如下所示的数组:

[Wed Jan 04 21:56:08 UTC 2012, Thu Jan 12 21:58:36 UTC 2012, Thu Jan 12 22:13:24 UTC 2012, Thu Jan 12 22:13:34 UTC 2012]

Ruby中最好的方法是只计算该数组中的不同日期? 2012年1月12日出现了三次,但它应该只计算一次,因为我只关心月/日/年,而不是数值显示在数组中的实际时间。

因此,过滤后此数组的总计数应为2个不同的月/日/年值的计数。

2 个答案:

答案 0 :(得分:3)

是那些字符串还是DateTime对象?假设后者,并假设该数组被称为datetime_arr ...

date_arr = datetime_arr.map &:to_date
# => [Wed, 04 Jan 2012, Thu, 12 Jan 2012, Thu, 12 Jan 2012, Thu, 12 Jan 2012]

date_arr.uniq!
# => [Wed, 04 Jan 2012, Thu, 12 Jan 2012]

date_arr.length
# => 2

我希望有所帮助。

答案 1 :(得分:0)

虽然您已经接受了答案,但我想要注意的是,如果您正在迭代项目列表并且想要为每个特定分组执行一次操作(例如输出标题),则应使用Enumerable#group_by为方便起见:

require 'date'
all_times = 5.times.map{ |i| Time.now + 3600 * 3 * i }
all_times.sort.group_by(&:to_date).each do |day, day_times|
  puts "",day,"-"*40
  day_times.each do |time|
    puts time.strftime(" * %I:%M%P")
  end
end

#=> 2012-01-12
#=> ----------------------------------------
#=>  * 08:56pm
#=>  * 11:56pm
#=> 
#=> 2012-01-13
#=> ----------------------------------------
#=>  * 02:56am
#=>  * 05:56am
#=>  * 08:56am