2

Google アナリティクスの開始日と終了日を設定して、過去 30 日間のユニーク ユーザーを取得しようとしています。を作成しましたが、 30 日前end_date = DateTime.now.strftime("%Y-%m-%d")に設定するにはどうすればよいですか。start_date

4

5 に答える 5

5

この質問は非常に古いものだと思いますが、知る必要がある人のために、これを行うためのクリーンな方法を次に示します。

start_date = (Date.now - 30.days).strftime("%Y-%m-%d")

また

start_date = (Date.now - 1.month).strftime("%Y-%m-%d")

DateTime.now、およびで同様のことができますTime.now

于 2015-08-28T10:54:54.940 に答える
3

問題は、 の作成が行き過ぎていることですend_date

数学機能を持たない文字列に変換しています。代わりに、DateTime のままにしておくと、整数を加算および減算して日付計算を行う機能を継承します。

require 'date'

datetime_now = DateTime.now
end_date = datetime_now.strftime("%Y-%m-%d") # => "2013-08-06"
end_date.class # => String

end_date = datetime_now # => #<DateTime: 2013-08-06T14:55:20-07:00 ((2456511j,78920s,731393000n),-25200s,2299161j)>
end_date - 30 # => #<DateTime: 2013-07-07T14:55:20-07:00 ((2456481j,78920s,731393000n),-25200s,2299161j)>

end_date - 30正確に 30 日前の DateTime を返すことに注意してください。時間コンポーネントは保持されます。必要な値を取得したら、値を文字列に変換します。

于 2013-08-06T21:58:14.380 に答える
0

ティンマンの提案に従って更新:

ルビーの場合:

require 'date'
end_date = DateTime.now
start_date = end_date - 30
formatted_end_date = end_date.strftime("%Y-%m-%d")
formatted_start_date = start_date.strftime("%Y-%m-%d")

Rails またはactive_support/time必要な場合:

日と前の方法を使用します。

start_date = 30.days.ago

コードは次のとおりです。

end_date = DateTime.now
start_date = end_date - 30.days
formatted_end_date = end_date.strftime("%Y-%m-%d")
formatted_start_date = start_date.strftime("%Y-%m-%d")

このように、start_date は end_date のちょうど 30 日前になります。2 つの DateTime をインスタンス化すると、正確に 30 日離れることはありません。

daysおよびメソッドは、次のago行を使用して Rails 環境の外部からアクセスできます。

require 'active_support/time'
于 2013-08-06T20:50:31.597 に答える
0

そのためにヘルパーメソッドを使用することをお勧めします。何かのようなもの

# Gets time range for x number timeunits ago
  def time_range(unit, timeunit = nil)
    if timeunit == "weeks"
      now = Time.zone.now.beginning_of_week
    elsif timeunit == "months"
      now = Time.zone.now.beginning_of_month
    else
      now = Time.zone.now.beginning_of_day
    end
    # Ex: time_range(0, "days") --> Get the time range for today  between the beginning of today and the beginning of tommorow - 1 second
    now - unit.send(timeunit)..now + 1.send(timeunit) - 1.seconds - unit.send(timeunit)
  end

時間範囲をリクエストするのに役立ちます。したがって、次のようなものを要求すると;

time_range(0, "months")

0 か月前 (今月) の時間範囲を返します。

Thu, 01 Sep 2016 00:00:00 UTC +00:00..Fri, 30 Sep 2016 23:59:59 UTC +00:00

そして、単純にデータベース オブジェクトをクエリして、範囲内のすべてをカウントすることができます。

Visit.where(started_at: time_range(unit, timeunit)).count
于 2016-09-07T08:11:26.720 に答える