First, I'm not really sure what are you asking about, because it looks like the code intentionally does what you describe... When there's time provided, the date fields are assigned nil . And I don't think that is Chronic is to blame because that's how your code works.

Not knowing your design (why there are separate date & time fields), the types of fields etc., I would suggest starting with a little kludge like this:

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

or:

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

Or maybe the problem is outside the code you provided: in the part that is responsible for the "because it has no date, it will not show in results" behavior? Maybe you should make the conditions more flexible?