static function snapMonth($dt, $direction)
 {
     $month = null;
     $days = Std::int(($dt - 62135596800.0 - datetime__DateTime_DateTime_Impl_::yearStart($dt)) / 86400) + 1;
     $month = datetime_utils_DateTimeMonthUtils::getMonth($days, datetime__DateTime_DateTime_Impl_::isLeapYear($dt));
     $isLeap = datetime__DateTime_DateTime_Impl_::isLeapYear($dt);
     switch ($direction) {
         case -1:
             return datetime__DateTime_DateTime_Impl_::yearStart($dt) + datetime_utils_DateTimeMonthUtils::toSeconds($month, $isLeap);
             break;
         case 1:
             return datetime__DateTime_DateTime_Impl_::yearStart($dt) + datetime_utils_DateTimeMonthUtils::toSeconds($month, $isLeap) + datetime_utils_DateTimeMonthUtils::days($month, $isLeap) * 86400;
             break;
         case 0:
             $previous = datetime__DateTime_DateTime_Impl_::yearStart($dt) + datetime_utils_DateTimeMonthUtils::toSeconds($month, $isLeap);
             $next = datetime__DateTime_DateTime_Impl_::yearStart($dt) + datetime_utils_DateTimeMonthUtils::toSeconds($month, $isLeap) + datetime_utils_DateTimeMonthUtils::days($month, $isLeap) * 86400;
             if ($next - ($dt - 62135596800.0) > $dt - 62135596800.0 - $previous) {
                 return $previous;
             } else {
                 return $next;
             }
             break;
     }
 }
 static function monthStart($this1, $month = null)
 {
     if ($month === null) {
         $month = 0;
     }
     if ($month === 0) {
         $days = Std::int(($this1 - 62135596800.0 - datetime__DateTime_DateTime_Impl_::yearStart($this1)) / 86400) + 1;
         $month = datetime_utils_DateTimeMonthUtils::getMonth($days, datetime__DateTime_DateTime_Impl_::isLeapYear($this1));
     }
     return datetime__DateTime_DateTime_Impl_::yearStart($this1) + datetime_utils_DateTimeMonthUtils::toSeconds($month, datetime__DateTime_DateTime_Impl_::isLeapYear($this1));
 }
Example #3
0
 static function addMonth($dt, $amount)
 {
     $month = null;
     $month = datetime_utils_DateTimeUtils_4($amount, $dt, $month) + $amount;
     if ($month >= 12) {
         $years = Std::int($month / 12);
         $time = datetime_utils_DateTimeUtils::addYear($dt, $years);
         $dt = $time + 62135596800.0;
         $month -= $years * 12;
     } else {
         if ($month < 0) {
             $years1 = Std::int($month / 12) - 1;
             $time1 = datetime_utils_DateTimeUtils::addYear($dt, $years1);
             $dt = $time1 + 62135596800.0;
             $month -= $years1 * 12;
         }
     }
     $isLeap = datetime__DateTime_DateTime_Impl_::isLeapYear($dt);
     $day = null;
     $value = null;
     $days1 = Std::int(($dt - 62135596800.0 - datetime__DateTime_DateTime_Impl_::yearStart($dt)) / 86400) + 1;
     $value = datetime_utils_DateTimeMonthUtils::getMonthDay($days1, datetime__DateTime_DateTime_Impl_::isLeapYear($dt));
     $max = datetime_utils_DateTimeMonthUtils::days($month, $isLeap);
     if ($value < 1) {
         $day = 1;
     } else {
         if ($value > $max) {
             $day = $max;
         } else {
             $day = $value;
         }
     }
     return datetime__DateTime_DateTime_Impl_::yearStart($dt) + datetime_utils_DateTimeMonthUtils::toSeconds($month, $isLeap) + ($day - 1) * 86400 + Std::int(($dt - Math::ffloor($dt / 86400) * 86400) / 3600) * 3600 + Std::int(($dt - Math::ffloor($dt / 3600) * 3600) / 60) * 60 + Std::int($dt - Math::ffloor($dt / 60) * 60);
 }