Ответ 1
Вы можете сравнить Time
без части даты, например, следующим образом:
time1.utc.strftime( "%H%M%S%N" ) <= time2.utc.strftime( "%H%M%S%N" )
Мне нужно написать метод, который будет проверять, находится ли Time.now
между часами работы и часами работы магазина.
Время открытия и закрытия сохраняется как объект времени, но я не могу сравнивать его, потому что магазин сохранил часы в 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" )
Попробуйте преобразовать время в число и отключить дни. Поскольку Время представлено в виде нескольких секунд, так как Эпоха UNIX с десятичной дробью является частью второй, вы можете преобразовать это число в несколько дней, когда дробь составляет часть дня.
Дневной номер = Ruby Time Number/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
Вы можете разделить время на часы, минуты и секунды.
Как описано в 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
между 10:00 и 17:00 в любую дату
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")
)
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;
}
}
}