diff --git a/src/applications/calendar/query/PhabricatorCalendarEventQuery.php b/src/applications/calendar/query/PhabricatorCalendarEventQuery.php
--- a/src/applications/calendar/query/PhabricatorCalendarEventQuery.php
+++ b/src/applications/calendar/query/PhabricatorCalendarEventQuery.php
@@ -14,6 +14,12 @@
   private $instanceSequencePairs;
 
   private $generateGhosts = false;
+  private $skipApplyTimezone = false;
+
+  public function setSkipApplyTimezone($skip_apply_timezone) {
+    $this->skipApplyTimezone = $skip_apply_timezone;
+    return $this;
+  }
 
   public function setGenerateGhosts($generate_ghosts) {
     $this->generateGhosts = $generate_ghosts;
@@ -102,8 +108,10 @@
 
     $events = $table->loadAllFromArray($data);
 
-    foreach ($events as $event) {
-      $event->applyViewerTimezone($this->getViewer());
+    if (!$this->skipApplyTimezone) {
+      foreach ($events as $event) {
+        $event->applyViewerTimezone($this->getViewer());
+      }
     }
 
     if (!$this->generateGhosts) {
@@ -166,18 +174,20 @@
           }
         }
 
+        $max_count = max(100, $this->getRawResultLimit());
+
         if ($end) {
           $sequence_end = $sequence_start;
           while ($date < $end) {
             $sequence_end++;
             $datetime->modify($modify_key);
             $date = $datetime->format('U');
-            if ($sequence_end > $this->getRawResultLimit() + $sequence_start) {
+            if ($sequence_end > $max_count + $sequence_start) {
               break;
             }
           }
         } else {
-          $sequence_end = $this->getRawResultLimit() + $sequence_start;
+          $sequence_end = $max_count + $sequence_start;
         }
 
         $sequence_start = max(1, $sequence_start);
@@ -186,9 +196,9 @@
           $events[] = $event->generateNthGhost($index, $viewer);
         }
 
-        if (count($events) >= $this->getRawResultLimit()) {
+        if (count($events) >= $max_count) {
           $events = msort($events, 'getDateFrom');
-          $events = array_slice($events, 0, $this->getRawResultLimit(), true);
+          $events = array_slice($events, 0, $max_count, true);
           $enforced_end = last($events)->getDateFrom();
         }
       }
@@ -209,6 +219,7 @@
       $sub_query = id(new PhabricatorCalendarEventQuery())
         ->setViewer($viewer)
         ->setParentQuery($this)
+        ->setSkipApplyTimezone($this->skipApplyTimezone)
         ->withInstanceSequencePairs($instance_sequence_pairs)
         ->execute();
 
@@ -379,6 +390,7 @@
     if (count($instance_of_event_phids) > 0) {
       $recurring_events = id(new PhabricatorCalendarEventQuery())
         ->setViewer($viewer)
+        ->setSkipApplyTimezone($this->skipApplyTimezone)
         ->withPHIDs($instance_of_event_phids)
         ->withEventsWithNoParent(true)
         ->execute();
@@ -422,7 +434,6 @@
     }
 
     $events = msort($events, 'getDateFrom');
-
     return $events;
   }
 
diff --git a/src/applications/people/query/PhabricatorPeopleQuery.php b/src/applications/people/query/PhabricatorPeopleQuery.php
--- a/src/applications/people/query/PhabricatorPeopleQuery.php
+++ b/src/applications/people/query/PhabricatorPeopleQuery.php
@@ -392,6 +392,8 @@
 
     $events = id(new PhabricatorCalendarEventQuery())
       ->setViewer(PhabricatorUser::getOmnipotentUser())
+      ->setSkipApplyTimezone(true)
+      ->setGenerateGhosts(true)
       ->withInvitedPHIDs(array_keys($rebuild))
       ->withIsCancelled(false)
       ->withDateRange($min_range, $max_range)
@@ -424,8 +426,10 @@
         // because of an event, we check again for events after that one ends.
         while (true) {
           foreach ($events as $event) {
-            $from = $event->getDateFromForCache();
-            $to = $event->getDateTo();
+            $event_for_timezone = clone $event;
+            $event_for_timezone->applyViewerTimezone($user);
+            $from = $event_for_timezone->getDateFromForCache();
+            $to = $event_for_timezone->getDateTo();
             if (($from <= $cursor) && ($to > $cursor)) {
               $cursor = $to;
               continue 2;