We always surprise them with the character phone call the morning of the sailing. Once we flew to Miami the day before and told them that morning we were going to Florida and we'd go to the beach etc. They were excited. The next morning, at the hotel, we got the call on my cell phone and they were going crazy screaming jumping around. Typically we sail out of NY and get "the call" a few hours before we leave. This past October we got rerouted from Bahamas/FL to Canada. So the surprise worked out great. They were just excited just to go, didn't know it got rerouted. One time we simply drove to the port and my daughter was like "that's a big boat." I said want to go on? She said ok and off we went. She was only about 2.5-3 so didn't really get what was going on as she does now that she's older.
I think waiting until the morning you leave of is the best. They find out, have time to pack favorite stuffed animal, etc., still so excited, no let down that it's not until next week/month/year, and off you go!