I was testing on some documents which had been uploaded into a records library in my dev environment.
If you upload a document into a normal document library the document should have an expiration date set immediately.
To update the expiration dates you can run the Information management policy job which sets and updates the expiration date for all documents.
The Expiration policy job should always be ran (or scheduled to run) after the Information management policy job.
If you are using a Records Centre and your documents are stored in a records library there could be the possibility that the expiration date is blank.
I discovered this and first of all tried running the jobs I mentioned above, but to no avail.
After some digging I found that if your records are saved to the records library by the content organizer rules then on arrival in the records library the expiration date is set.
However if you upload a document directly in to a records library the expiration date is not set on upload, and in my environment it was still not set after running the Information management policy job multiple times.
I have not found a solution for records uploaded directly to the records library, but by uploading records to the drop off library and using the routing rules to move them to the correct records library you will ensure that the expiration date is set on all records!
Hope this saves anyone researching this particular problem some time!
Thanks for reading,
Matt