28 votes

L'utilisation de Chronic peut-elle altérer votre sens du temps ?

Haha..

J'utilise Chronic pour analyser l'heure que les utilisateurs ajoutent dans le calendrier. Alors que le code fonctionne et implémente la bonne heure, le résultat final est que, SI un utilisateur ajoute une heure, alors elle n'a pas de date, et parce qu'elle n'a pas de date, elle n'apparaîtra pas dans les résultats. Avez-vous des idées ?

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 :

Voici la méthode time_provided ?

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

2voto

szeryf Points 941

Tout d'abord, je ne sais pas vraiment ce que vous demandez, car il semble que le code fait intentionnellement ce que vous décrivez... Quand il y a du temps fourni, les champs de date sont assignés nil . Et je ne pense pas que ce soit Chronic qui soit à blâmer, car c'est ainsi que votre code fonctionne.

Sans connaître votre conception (pourquoi il y a des champs séparés pour la date et l'heure), les types de champs, etc., je vous suggérerais de commencer par un petit truc comme celui-ci :

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

ou :

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

Ou peut-être que le problème se trouve en dehors du code que vous avez fourni : dans la partie responsable du comportement "parce qu'il n'a pas de date, il n'apparaîtra pas dans les résultats" ? Peut-être devriez-vous rendre les conditions plus flexibles ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X