My iPhone show delivered for hours for a message, then shows read but read from hours before I sent a message to a contact at 2:46 PM, and for hours it showed delivered. When I checked the message at 9 PM it shows it was read at 2:46 PM.

I tried searching for the answer on Google with no luck. Did the person turn their read receipts off then back on? Does anyone know why that would happen?
A common cause for this is simply that the contact received the message, but didn't have enough signal (cell or WiFi connectivity, or phone in flight mode, or similar) to be able to send the read-receipt back. 

The read-receipt then comes through much later when the phone regains its connection with Apple's servers.