Time.now
お店の営業時間と閉店時間の間にあるかどうかを確認するメソッドを書く必要があります。
開店時間と閉店時間は Time オブジェクトとして保存されますが、正確に比較することはできません2012/2/2
.
2012-02-02 02:30:00 UTC
となり、次のTime.now
ようになります。
07:23 +0200
日付部分なしで時間部分だけを比較するにはどうすればよいですか?
Time.now
お店の営業時間と閉店時間の間にあるかどうかを確認するメソッドを書く必要があります。
開店時間と閉店時間は Time オブジェクトとして保存されますが、正確に比較することはできません2012/2/2
.
2012-02-02 02:30:00 UTC
となり、次のTime.now
ようになります。
07:23 +0200
日付部分なしで時間部分だけを比較するにはどうすればよいですか?
Time
たとえば、次のように、日付部分なしでを比較できます。
time1.utc.strftime( "%H%M%S%N" ) <= time2.utc.strftime( "%H%M%S%N" )
これを行う素敵なライブラリhttps://github.com/bokmann/business_timeがあります。
BusinessTime::Config.with(beginning_of_workday: "8:30 am", end_of_workday: "5:30 pm") do
Time.now.during_business_hours?
end
次または前の営業時間への時間のローリング、2 つのタイムスタンプ間の営業時間のカウントなど、より多くのことができます。
Time を時間、分、秒に分解できます。
Time Classで説明されているように:
t = Time.now
hour = t.hour
minute = t.min
seconds = t.sec
2時間以内かどうかを比較するだけなので、以下のように確認できます。
if hour > openingHour and hour < closingHour
次のような日付部分なしでレールの時間のみを比較できますpost_review
。post_review
created_at
post_review.where("(created_at::time >= :start_time) AND (created_at::time <= :end_time)",
start_time: Time.parse("10 am").strftime("%r"),
end_time: Time.parse("5 pm").strftime("%r")
)
時刻を数値に変換して、曜日を削除してみてください。時間は UNIX エポックからの秒数として表され、10 進数は 1 秒の端数であるため、この数値を日数に変換して、端数を 1 日の端数にすることができます。
日ベースの数値 = Ruby Time 数値 / 60 / 60 / 24
次に、モジュラス演算子を使用して日の部分を取り除くことができるので、比較するために残っているのは時間だけです。したがって、次のようなものが必要です。
def is_open?(time)
open_h=Time.parse('2012-02-02 02:30:00 UTC')
close_h=Time.parse('2012-02-02 10:00:00 UTC')
(((time.to_r / 60 / 60 / 24) % 1) >= ((open_h.to_r / 60 / 60 / 24) % 1)) && (((time.to_r / 60 / 60 / 24) % 1) <= ((close_h.to_r / 60 / 60 / 24) % 1))
end
is_open? (Time.parse('2013-01-01 09:58:00 UTC'))
=> true
is_open? (Time.parse('2013-01-01 12:58:00 UTC'))
=> false
close_or_open_time_object.to_a.first(3).reverse <=> Time.now.to_a.first(3).reverse
これは、時間が 24 時間形式で、開始時間が終了時間よりも短い場合にのみ機能します。
Time start = DateUtil.convertStringToTime(Object.getStartTime());
Time mid = DateUtil.convertStringToTime(time);
Time end = DateUtil.convertStringToTime(Object.getEndTime());
if(mid.getHours()>start.getHours() && mid.getHours()< end.getHours())
{
flag=true;
}
else if(mid.getHours() == start.getHours() && mid.getHours() < end.getHours())
{
if(mid.getMinutes() > start.getMinutes())
{
flag=true;
}
else if(mid.getMinutes() == start.getMinutes())
{
if(mid.getSeconds() >= start.getSeconds())
{
flag=true;
}
}
}
else if(mid.getHours() > start.getHours() && mid.getHours() == end.getHours())
{
if(mid.getMinutes() < end.getMinutes())
{
flag=true;
}
else if(mid.getMinutes() == end.getMinutes())
{
if(mid.getSeconds() <= end.getSeconds())
{
flag=true;
}
}
}
else if(mid.getHours() == start.getHours() && mid.getHours() == end.getHours())
{
if(mid.getMinutes() > start.getMinutes() && mid.getMinutes() < end.getMinutes())
{
flag=true;
}
else if(mid.getMinutes() == start.getMinutes() && mid.getMinutes() < end.getMinutes())
{
if(mid.getSeconds() > start.getSeconds())
{
flag=true;
}
}
else if(mid.getMinutes() > start.getMinutes() && mid.getMinutes() == end.getMinutes())
{
if(mid.getSeconds() < end.getSeconds())
{
flag=true;
}
}
else if(mid.getMinutes() == start.getMinutes() && mid.getMinutes() == end.getMinutes())
{
if(mid.getSeconds() > start.getSeconds() && mid.getSeconds() < end.getSeconds())
{
flag=true;
}
}
}