Porównując jeśli czas jest w przeszłości, kiedy ignorując składnik datę w Ruby

głosy
1

W aplikacji szyn mam obiektem czas przechowywane w następujący sposób:

#  start_time :time

Podczas tworzenia zmiennej dla tego pola używam '19: 00' . Nie dbam o składniku data obiektu, musi być tylko raz.

Kiedy następnie wykonać połączenie w Ruby, aby sprawdzić, czy czas jest w przeszłości (Obecny czas to 10:00), takich jak:

start_time.past?

zwraca true, ponieważ obiekt zawiera następujące elementy:

=> 2000-01-01 19:00:00 UTC

Postgres postawił datę komponent na mojego czasu - wynikający w przeszłości? powrocie prawda, mimo że jest 10:00 kiedy robię to wezwanie, bo 19:00 pm 1 stycznia 2000 jest zdecydowanie w przeszłości!

Jak mogę sprawdzić, czy czas jest w przeszłości, ignorując komponent Data obiektu Czasu? Chcę tylko sprawdzić, czy 19:00 zdarzyło się jeszcze dzisiaj.

Utwórz 05/10/2015 o 16:52
użytkownik
W innych językach...                            


2 odpowiedzi

głosy
0

Co powiesz na

now = Time.now start_time.hour + start_time.min + start_time.sec < now.hour + now.min + now.sec

Edytować:

start_time.hour*10000 + start_time.min*1000 + start_time.sec*100 < now.hour*10000 + now.min*1000 + now.sec*100

Więc dajesz Godzin więcej „wagę” niż minut itp.

Odpowiedział 05/10/2015 o 17:06
źródło użytkownik

głosy
0

Ruby jest dość uparty, że czas nie ma sensu bez skojarzonego terminie. Chociaż Postgres ma typ czas tylko, Ruby nie posiada wbudowany czasu tylko przedmiotem, więc ActiveRecord automatycznie dodaje obojętne datę kiedy ładuje te wartości. Masz dwie opcje: 1. rozebrać date off obu obiektów czasowych i porównać je, 2. ustawić tę samą atrapę datę na obu obiektów czasowych i porównać je.

Opcja 1:

Znajdź „drugiego dnia” obu terminach i porównać je.

def rel_past?(now=Time.now.utc)
  ((self.hour * 60) + self.min) * 60 + self.sec < ((now.hour * 60) + now.min) * 60 + now.sec
end

Opcja 2:

Połączyć aktualny czas z manekina data obiektu porównywane.

def rel_past?(now=Time.now.utc)
  self < Time.utc(
    self.year,
    self.month,
    self.day,
    now.hour,
    now.min,
    now.sec
  )
end
Odpowiedział 22/11/2017 o 16:31
źródło użytkownik

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more