首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两个等间隔Rails的DateTime对象间的数据检索

两个等间隔Rails的DateTime对象间的数据检索
EN

Stack Overflow用户
提问于 2014-11-15 20:05:11
回答 1查看 756关注 0票数 0

我是rails的新手,我认为这是常见的问题。目前,我在rails中有两种不同的方法来获取今天和每周的数据。然后,我过滤数据,在today方法中找到每小时的最大值,在week方法中找到每一天的最大值,并相应地返回json对象。

现在我想从我的rest api中删除限制,通过编写一个方法来查找两个日期之间的差异,并找到它们之间的间隔,差异可以是分钟,小时,天等,然后差异将被分成10个相等的部分,并找到提取该特定部分的最大值。例如,如果部件间隔为10分钟,那么我需要每个部件的最大值,类似于几个小时或一天。

发现差异很容易,但我不知道如何进一步处理,任何指针,请,我强烈相信,许多人经历过类似的问题,如果我能得到任何良好的指针基本上在rails将是很好的。

我的日期时间格式是

代码语言:javascript
复制
Mon Jun 23 16:00:06 2014 GMT 0200
EN

回答 1

Stack Overflow用户

发布于 2014-11-15 22:09:22

只要秒数足够精确,你就可以通过简单的减法来比较两个DateTime对象:

代码语言:javascript
复制
a = DateTime.new(2014) # Wed, 01 Jan 2014 00:00:00 +0000
b = DateTime.new(2015) # Thu, 01 Jan 2015 00:00:00 +0000
diff = b.to_i - a.to_i # in seconds.
puts "2014 has #{ (diff / 1.day).round } days"

ActiveSupport提供了一些方法,我们可以在这些方法上将整数转换为时间,这使得添加十分之一的差变得非常容易

代码语言:javascript
复制
puts "a tenth into 2014 is #{ a + (diff / 10).seconds }"

您可以使用将一系列DateTime对象传递给where子句:

代码语言:javascript
复制
Foo.where(created_at: a..(a + (diff / 10).seconds))

因此,总结一下:

代码语言:javascript
复制
class Foo < ActiveRecord::Base

    # Get the maximum value of bar column 
    #   for divided into periods between a start and end date.
    # @param start [DateTime]
    # @param finish [DateTime]
    # @param divisor [Integer] the number of parts to split into
    # @return array 
    #   will always have divisor number of elements
    #   elements may be empty 
    def maximum_bar_values_for_period(start, finish, divisor = 10)
        diff = finish.to_i - start.to_i
        part = diff / divisor
        (0..divisor).map do |i|
            start_period = start + ((i - 1) * part).seconds
            end_peroid =  start_period + part.seconds
            Foo.where(created_at: start_period..end_peroid).maximum(:bar)
        end
    end
end
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26945640

复制
相关文章

相似问题

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