Updating date parsing logic

* DRYing up date parsing code
* Checking values against ISO8601 spec instead of checking for unwanted characters
@escowles this looks great! one change I might suggest either ensuring that at least an empty string is passed in, or use conditional assignment for date immediately #clean_date. 
`  date ||= '' `

Then, you can drop all the nil checks for date.