collective.autopublishing can publish / retract content based on effective/expiration date, or a custom date field. Using a cron or clockserver trigger to search for content to retract or publish.
See https://github.com/collective/collective.autopublishing