You also don’t store dates in a string that you’ll have to parse later
Depends. If the format is clearly defined, then there's no problem. Or could use a binary format. The point is that you store day/month/year separately, instead of a Unix timestamp.
And you understand that you could have a date in unix time and leave the time to be midnight, right?
No, you can't.
First of all, midnight in what timezone? A timestamp is a specific instant in time, but dates are not, the specific moment that marks the beginning of a date depends on the timezone.
Say you store the date as midnight in your local timezone. Then your timezone changes, and all your stored dates are incorrect. And before you claim timezones rarely change, they change all the time. Even storing it as the date in UTC can cause problems.
You use timestamps for specific instances in time, but never for storing things that are in local time. Even if you think you are storing a specific instant it, time, you aren't. Say you make an appointment in your agenda at 14:00 local time, you store this as a Unix timestamp. It's a specific instant in time, right? No, it's not. If the time zone changes so, for example, DST goes into effect at a different time, your appointment could suddenly be an hour off, because that appointment was not supposed to be at that instant in time, it was supposed to be at 14:00 in the local timezone, so if the timezone changes the absolute point in time of that appointment changes with it.