2010-05-12 14 views
28

Haha ..L'utilizzo di Chronic può compromettere il senso del tempo?

Sto utilizzando Chronic per analizzare il tempo che gli utenti aggiungono nel calendario. Laddove il codice funziona e implementa il momento giusto, il risultato finale è che, SE un utente aggiunge un tempo, non ha una data e poiché non ha una data, non verrà mostrato nei risultati. Qualche idea?

def set_dates 
    unless self.natural_date.blank? || Chronic.parse(self.natural_date).blank? 
    # check if we are dealing with a date or a date + time 
    if time_provided?(self.natural_date) 
     self.date = nil 
     self.time = Chronic.parse(self.natural_date) 
    else 
     self.date = Chronic.parse(self.natural_date).to_date 
     self.time = nil 
    end 
    end 

    unless self.natural_end_date.blank? || Chronic.parse(self.natural_end_date).blank? 
    # check if we are dealing with a date or a date + time 
    if time_provided?(self.natural_end_date) 
     self.end_date = nil 
     self.end_time = Chronic.parse(self.natural_end_date) 
    else 
     self.end_date = Chronic.parse(self.natural_end_date).to_date 
     self.end_time = nil 
    end 
    end 
end 

Edit:

Ecco l'time_provided? Metodo:

def time_provided?(natural_date_string) 
    date_span = Chronic.parse(natural_date_string, :guess => false) 
    (date_span.last - date_span.first).to_i == 1 
end 
+10

Devo ammettere, quando ho letto il titolo di questo, mi ha fatto ridere. –

+1

ha! anche io, pensavo fosse un troll –

+11

+1 All'inizio ero wtf. Poi ho riso. Allora ho pianto. Poi sono diventato alto. – Alan

risposta

2

In primo luogo, io non sono davvero sicuro di quello che stai chiedendo circa, perché sembra che il codice intenzionalmente fa ciò che si descrive ... Quando c'è tempo previsto, i campi data vengono assegnati nil. E non penso che sia colpa di Chronic perché è così che funziona il tuo codice.

Non conoscendo il vostro disegno (perché ci sono data & campi di tempo separati), i tipi di campi, ecc, vorrei suggerire di iniziare con un po 'di ripiego come questo:

if time_provided?(self.natural_date) 
    self.time = Chronic.parse(self.natural_date) 
    self.date = self.time.to_date 

o:

self.end_date = Chronic.parse(self.natural_date).to_date 
if time_provided?(self.natural_date) 
    self.time = Chronic.parse(self.natural_date) 
end 

O forse il problema è al di fuori del codice che hai fornito: nella parte che è responsabile del comportamento "perché non ha data, non mostrerà nei risultati"? Forse dovresti rendere le condizioni più flessibili?

+0

Grande supposizione. Sì, vedo che il codice dovrebbe sicuramente non impostarlo su zero. Quindi quello che ho fatto è stato reso questa parte almeno non nulla. self.date = Chronic.parse (self.natural_date) E, non del tutto sicuro di quello che ha fatto, ma almeno lo ha fatto in modo che non si potesse aggiungere un momento in quanto non ne suggerisce uno automatico. : D. La vera domanda è, è possibile produrre un tempo e una data separatamente. Quindi, se aggiungono una data + ora, otterrò sia una data, sia una data e un'ora separate. In alternativa, se aggiungono solo una data, otterrei una data e una data + ora senza l'ora: D – Trip

Problemi correlati