added a method to force the provided start date to the first occurence

I figured this was best implemented as a separate method so that it can be explicitly called if desirable and devs can continue to use their own exception handling otherwise.

also refactored date component extraction logic for reuse