1

私はこの問題に頭を悩ませるのに苦労しています...

投票付きのアプリを実行しています。新しいアイデアをcreated_atの日付から24時間だけ持続させるのではなく、投票を「次の正午」に開始して24時間持続させたいと考えています。

つまり、水曜日の午後8時にアイデアを作成した場合、人々は金曜日の正午まで(次の正午から24時間後)そのアイデアに投票できます。または、木曜日の午前11時50分にアイデアを作成した場合は、金曜日の正午まで投票する必要があります。

つまり、基本的には、インスタンスを作成する方法を見つける必要があります...次のように言います。

     @recentideas = current.user.ideas.where(:created_at => (nextnoontime)...(nextnoontime + 24.hours))

上記は実際のコードではなく、全体像を把握するためのものであることを認めます...

前もって感謝します。

soultionで更新:

より簡単な解決策(正確にはエレガントではありません)は次のように言うことでした:

     <% if idea.created_at.hour < 12 %>
       <% @nextnoon = idea.created_at.midnight + 12.hours %>
       <% @timedif = @nextnoon - idea.created_at %>
     <% else %> 
       <% @nextnoon = idea.created_at.tomorrow.midnight + 12.hours %>
       <% @timedif = ((@nextnoon - 12.hours) - idea.created_at) + 12.hours %>
     <%end%>

そして、関連するifステートメントは次のとおりです。

     <% if idea.created_at > ((24.hours + @timedif)/3600).hours.ago %>

少し不格好ですが、後日クリーンアップします。

4

4 に答える 4

2

私は同様の問題を抱えていました、そしてこれは私が使用したものです:

1. DateTime.tomorrow +12.hours
2. DateTime.tomorrow + 1.day + 12.hours
于 2014-10-16T22:05:50.903 に答える
1

あなたはそのように終了日の正午を見つけることができます

now = DateTime.now
twelve_hours_from_now = now + 12.hours
beginning_of_day = DateTime.new(twelve_hours_from_now.year, twelve_hours_from_now.month, twelve_hours_from_now.day)
noon_of_ending_day = beginning_of_day + 36.hours

したがって、クエリは次のようになります

@recentideas = current.user.ideas.where(:created_at => (now...noon_of_ending_day))

ただし、現在から将来の間にアイデアが作成されないため、このクエリはあまり意味がありません。私たちはまだそれらのアイデアが現れるのを待っています。

于 2011-09-12T05:49:55.943 に答える
0

または慢性的に使用する:

time = Chronic.parse "noon tomorrow"
于 2012-01-22T03:30:21.650 に答える
0

次の「正午」を見つけるためのクリーンな方法は次のとおりです。

# Today
time = DateTime.now

# Noon, today
time += (12 - time.hour).hours
time -= time.min.minutes
time -= time.sec.seconds

# Noon tomorrow, if noon today is in the past
time += 1.day unless time.future?
于 2012-01-22T02:12:40.283 に答える