Подтвердить что ты не робот

Сравнение времени только, без дат?

Мне нужно написать метод, который будет проверять, находится ли Time.now между часами работы и часами работы магазина.

Время открытия и закрытия сохраняется как объект времени, но я не могу сравнивать его, потому что магазин сохранил часы в 2012/2/2, поэтому часы работы будут выглядеть примерно так:

2012-02-02 02:30:00 UTC

и Time.now будет:

07:23 +0200

Как я могу сравнить только часть времени без части даты?

4b9b3361

Ответ 1

Вы можете сравнить Time без части даты, например, следующим образом:

time1.utc.strftime( "%H%M%S%N" ) <= time2.utc.strftime( "%H%M%S%N" )

Ответ 2

Попробуйте преобразовать время в число и отключить дни. Поскольку Время представлено в виде нескольких секунд, так как Эпоха 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

Ответ 3

Вы можете разделить время на часы, минуты и секунды.

Как описано в Time Class:

t = Time.now
hour = t.hour
minute = t.min
seconds = t.sec

Так как вам нужно просто сравнить, будет ли он в течение 2 часов, вы можете проверить его, как показано ниже.

if hour > openingHour and hour < closingHour

Ответ 4

Вы можете сравнить только время в рельсах без даты, например: --- Здесь 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")
 )

Ответ 5

close_or_open_time_object.to_a.first(3).reverse <=> Time.now.to_a.first(3).reverse

Ответ 6

Это будет работать только в течение 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;
            }
        }
    }