diff --git a/core/ScheduledTime.php b/core/ScheduledTime.php
index 5060a33d56ce61a3c9fab51cde7b59d42301ed5e..53e1e867933790f3e3c246164eeb2e8b2e745a45 100644
--- a/core/ScheduledTime.php
+++ b/core/ScheduledTime.php
@@ -138,12 +138,15 @@ abstract class ScheduledTime
         $dateInTimezone     = Date::factory($arbitraryDateInUTC, $this->timezone);
 
         $midnightInTimezone = date('H', $dateInTimezone->getTimestamp());
-        $hoursDifference    = (24 - $midnightInTimezone) % 24;
 
         if ($arbitraryDateInUTC->isEarlier($dateInTimezone)) {
-            $hoursDifference = -1 * $hoursDifference;
+            $hoursDifference = 0 - $midnightInTimezone;
+        } else {
+            $hoursDifference = 24 - $midnightInTimezone;
         }
 
+        $hoursDifference  = $hoursDifference % 24;
+
         $rescheduledTime += (3600 * $hoursDifference);
 
         if ($this->getTime() > $rescheduledTime) {
diff --git a/tests/PHPUnit/Core/ScheduledTime/DailyTest.php b/tests/PHPUnit/Core/ScheduledTime/DailyTest.php
index c825cbfb6fc4ae42154dc6de169da20360c89522..a63302cffca88b7053c527e00f38f08b88ce80a3 100644
--- a/tests/PHPUnit/Core/ScheduledTime/DailyTest.php
+++ b/tests/PHPUnit/Core/ScheduledTime/DailyTest.php
@@ -101,7 +101,7 @@ class ScheduledTime_DailyTest extends PHPUnit_Framework_TestCase
 
         $mock->setTimezone('Pacific/Auckland');
         $timeAuckland = $mock->getRescheduledTime();
-        $this->assertEquals(-11 * $oneHourInSeconds, $timeAuckland - $timeUTC);
+        $this->assertEquals(-13 * $oneHourInSeconds, $timeAuckland - $timeUTC);
 
 
         $mock->setTimezone('America/Los_Angeles');
diff --git a/tests/PHPUnit/Core/ScheduledTime/MonthlyTest.php b/tests/PHPUnit/Core/ScheduledTime/MonthlyTest.php
index 5c837cdd31d0daa85867a262e9b070fbf5140199..2f26d083c3dc015365a6cff27928c786dea51d9c 100644
--- a/tests/PHPUnit/Core/ScheduledTime/MonthlyTest.php
+++ b/tests/PHPUnit/Core/ScheduledTime/MonthlyTest.php
@@ -112,7 +112,7 @@ class ScheduledTime_MonthlyTest extends PHPUnit_Framework_TestCase
 
         $mock->setTimezone('Pacific/Auckland');
         $timeAuckland = $mock->getRescheduledTime();
-        $this->assertEquals(-11 * $oneHourInSeconds, $timeAuckland - $timeUTC);
+        $this->assertEquals(-13 * $oneHourInSeconds, $timeAuckland - $timeUTC);
 
 
         $mock->setTimezone('America/Los_Angeles');
diff --git a/tests/PHPUnit/Core/ScheduledTime/WeeklyTest.php b/tests/PHPUnit/Core/ScheduledTime/WeeklyTest.php
index ecf5bbaf58e2ea874dd1b55808c3628c12b9f3a4..46bf3725cc011b4e6bfd1dc49f338ee5c157b210 100644
--- a/tests/PHPUnit/Core/ScheduledTime/WeeklyTest.php
+++ b/tests/PHPUnit/Core/ScheduledTime/WeeklyTest.php
@@ -148,7 +148,7 @@ class ScheduledTime_WeeklyTest extends PHPUnit_Framework_TestCase
 
         $mock->setTimezone('Pacific/Auckland');
         $timeAuckland = $mock->getRescheduledTime();
-        $this->assertEquals(-11 * $oneHourInSeconds, $timeAuckland - $timeUTC);
+        $this->assertEquals(-13 * $oneHourInSeconds, $timeAuckland - $timeUTC);
 
 
         $mock->setTimezone('America/Los_Angeles');