Если события заканчиваются на день раньше, но не начинаются на день раньше, скорее всего, ваши серверные сценарии не получают или не учитывают информацию о часовом поясе на дату окончания, поступающую из браузера. Если события начинаются в полночь по тихоокеанскому времени (или 3:00 по восточному поясному времени) и заканчиваются в полночь по тихоокеанскому времени (или в 9:00 по тихоокеанскому времени) или, может быть, в полночь по Гринвичу (или в 4:00 по тихоокеанскому времени), это будет учитывать события, «заканчивающиеся рано». Браузер должен отправлять все события с полной информацией о дате и времени (например, «3/6/2010 00:00:00 GMT-0800»), а серверные сценарии также должны сохранять и сообщать эту информацию точно.
Я живу в Японии, но много работаю в Северной Америке, поэтому постоянно вижу эту проблему. Я считаю, что это действительно помогает разработке думать обо всех событиях в GMT, а не о вашем домашнем часовом поясе - особенно если кто-то из ваших пользователей живет в разных часовых поясах. JS обрабатывает информацию о часовом поясе довольно хорошо (помимо отсутствия информации о летнем времени, она работает фантастически), и большинство серверов работают с часовым поясом очень хорошо, поэтому большинство ошибок, которые вы видите, связаны с тем, что клиентские скрипты отправляют неполную информацию о дате и пытаются сделать делать.
Стоит также проверить, как ваше приложение работает 7 ноября 2010 года в 2:00 утра, поскольку этот день длится 25 часов, а 13 марта 2011 года - только 23 дня. Переключатель на летнее время - это дьявол.