"I have had a great time today" generally implies that the day is not yet over because of the present perfect tense. Essentially what it means is "the events up until this point have been enjoyable"
The second sentence is in past tense and implies that the events have come to an end.
As for when you would use each it might be easier for me to set up a scenario:
You and a friend go out for a walk on the beach, and then watch a movie at the theater. After the movie you and your friend planned to go to the movie, but in order to assure her that you are enjoying the day, you tell your friend "I've had a great time today (so far)." You and your friend then enjoy dinner and then you are dropped off at your house. You say "I had a great time today" to let your friend know that the past events of the day have been enjoyable for you. After that, you both go home and the day comes to an end.
I hope this helps :)