è molto più facile se, invece di prendere la data, prendi il timestamp che è espresso in secondi. E quando dovrai stampare la differenza controlli che sia inferiore di 1h e lo esprimi in minuti, inferiore di 1gg e lo esprimi in ore, altrimenti inserisci la data.

per esprimerlo in minuti basta dividere il valore per 60. (prendendo il valore che più si avvicina)
per esprimerlo in ore basta dividerlo per 3600. (prendendo il valore che più si avvicina)
Per inserire la data e l'ora in cui è stato pubblicato:
Codice PHP:
echo 'date("d/m/Y", $variabile) . ' alle ore ' . date("H:i", $variabile)'
[nella $variabile hai il valore del timestamp]

per inserire il timestamp nel database devi cambiare il campo da DATE a INT in quanto sarà un numero.