just write a script....
Set the required field values with the variables that data u wouldn't want to change then create new record and paste corresponding fields.
the script must be attached by the Date field by script trigger(on object save)
then see what happens.
Don't you want to create a record when today becomes older than the expiration date instead of the opposite as you've posted?