I am entrusted with a database application for a tour operator. The actual use cases for start and end dates can be quite tricky.
For some of them arrival and departure date are most relevant, for others it is arrival and nights (or first and last date of the evening of the night). In the latter case, think of a calendar that shows the occupancy of a room for the manager. The only reasonable way to do this is to mark the days where the room is occupied in the evening and ignore the morning.
With rental cars it is even trickier, because there a 24 hour cycle form pickup time to drop off time is the basis for counting the days of rental.
Some metrics are best made available to managers in two versions for convinience, e.g. trip price per person per day vs. trip price per person per night (where day = night + 1).
For the business logic (except for rental cars, which use a modified one) I implemented a special general purpose Duration class with the following properties:
DateOfArrival
DateOfDeparture
DateFirst /* same as DateOfArrival */
DateLast /* day before DateOfDeparture */
Nights
Days /* Nights plus 1 */
The class comes with some operations for combining Durations or calculate/check-for intersections, etc.
With this class, it is easy to switch between an open and a closed interval view of the same data, and it is very transparent in the source code which is actually used.