The biggest problem is that a "date" means a different start and end "time" depending on a time zone of a user. And you cannot force all of your users to stick to one time zone all of the lives, not to mention DST changes twice a year. So you cannot simply create a new property in your entity to store a "date" object as was suggested. (This is why GAE does not have a "date" type property.)
I built a scheduling app. When a user specifies the desired range for events (it can be a day, a week or a month), I retrieve all events that have an end time larger than the start time of the requested range, and then I loop through them until I find the last event which has a start time smaller than the end time of the range.
You can specify how many entities you want to fetch in one request depending on a requested range (more for month than for a day). For example, if a given calendar is likely to have 5-10 events per day, it's enough to fetch the first 10 entities (you can always fetch more if condition is not met). For a month you can set a batch size to 100, for example. This is a micro-optimization, however.