In my opinion, modules are allowed to make assumptions if they are explicitely documented in the module documentation/method description.
This is a major concept of Design by contract. Define contracts between your different modules to establish the responsability of each one.
In your case, you might decide that all validations are the responsibility of your module. In which case all other modules can invoke yours without previous checking. But you night as well decide that your module is very simple and suppose that the date has to be checked in another module, in which case you can make the assumption that the date is valid. But you NEED to precise in the documentation that unexpected behaviour (exception, incorrect result) might happen if the date is invalid.
In the end, it is just about distributing the responsibilities in the modules of your application and ensuring that all modules respect their contracts.