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)); }
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); }