【问题标题】:Iterating the Time for 24 hours for 30 days in ruby在红宝石中迭代时间 24 小时 30 天
【发布时间】:2012-04-05 13:48:30
【问题描述】:

我正在使用 ruby​​ gem 开发谷歌分析 API。它接受参数并生成结果,我从七个指标中获取数据。它接受开始时间和结束时间,并根据我们传递的时间生成数据。

这是那个例子

Visits.results(pro1, {:start_date => Time.now - 86400, :end_date => Time.now})

这给了我过去 24 小时的总访问次数。

我的要求有点复杂。还有其他几个指标。我需要从前 30 天的谷歌分析中获取数据。假设如果我今天进行转储,它应该会得到我之前 30 天的数据。比如 28th 27th 26th 25th.... 获取 2012 年 3 月 28 日 00:00:00 到 2012 年 3 月 28 日 59:59:59 、 2012 年 3 月 27 日 00:00:00 到 2012 年 3 月 27 日 59:59:59 的数据和......自 2-3 天以来,我必须努力实现这一目标。我是红宝石的新手。请帮帮我。为了让我需要的东西从谷歌分析中获取数据,在过去 30 天内迭代 24 小时。

【问题讨论】:

  • 您是否正在寻找类似(Time.now - 1.days), (Time.now - 1.months), (Time.now - 1.years) 的东西注意:它与rails 一起使用

标签: ruby-on-rails ruby ruby-on-rails-3 ruby-on-rails-3.1


【解决方案1】:

如果您想要个别日子的结果

results = []
30.downto(1) do |n|
  results << Visits.results(pro1, {:start_date => Date.today - n.days, :end_date => Date.today - (n-1).days})
end

或者如果你想要它们一次

Visits.results(pro1, {:start_date => Date.today - 30.days, :end_date => Date.today})

如果您还想包括今天,请将结束日期设置为 Date.tomorrow

【讨论】:

  • 从可读性的角度来看,我更喜欢使用n.days.ago。例如。 Visits.results(pro1, {:start_date =&gt; n.days.ago, :end_date =&gt; (n-1).days.ago})
  • n.days.ago 包括时间 - 所以 1.day.ago 是昨天的当前时间。而Date.today-1.day 只给出日期(相当于昨天午夜)。如果您使用时间部分,这是一个重要的区别
  • 好点Shaun,在这种情况下Date.today - 1.day 确实有意义。虽然(这可能只是我个人的喜好)你也可以做1.day.ago.at_midnight,或1.day.ago.to_date
  • 我尝试了她提到的所有可能性,但没有任何结果。
【解决方案2】:

试试

Visits.results(pro1, {:start_date => Date.today.last_month , :end_date => Date.today})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多