calc.php

来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 1,737 行 · 第 1/4 页

PHP
1,737
字号
    {        if (empty($year)) {            $year = Date_Calc::dateNow('%Y');        }        if (empty($month)) {            $month = Date_Calc::dateNow('%m');        }        if (empty($day)) {            $day = Date_Calc::dateNow('%d');        }        if ($month > 1) {            $month--;        } else {            $year--;            $month=12;        }        $day = Date_Calc::daysInMonth($month,$year);        return Date_Calc::dateFormat($day,$month,$year,$format);    } // end func endOfPrevMonth    /**     * Returns date of the next weekday of given date,     * skipping from Friday to Monday.     *     * @param string day in format DD, default is current local day     * @param string month in format MM, default is current local month     * @param string year in format CCYY, default is current local year     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function nextWeekday($day='',$month='',$year='',$format='%Y%m%d')    {        if (empty($year)) {            $year = Date_Calc::dateNow('%Y');        }        if (empty($month)) {            $month = Date_Calc::dateNow('%m');        }        if (empty($day)) {            $day = Date_Calc::dateNow('%d');        }        $days = Date_Calc::dateToDays($day,$month,$year);        if (Date_Calc::dayOfWeek($day,$month,$year) == 5) {            $days += 3;        } elseif (Date_Calc::dayOfWeek($day,$month,$year) == 6) {            $days += 2;        } else {            $days += 1;        }        return(Date_Calc::daysToDate($days,$format));    } // end func nextWeekday    /**     * Returns date of the previous weekday,     * skipping from Monday to Friday.     *     * @param string day in format DD, default is current local day     * @param string month in format MM, default is current local month     * @param string year in format CCYY, default is current local year     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function prevWeekday($day='',$month='',$year='',$format='%Y%m%d')    {        if (empty($year)) {            $year = Date_Calc::dateNow('%Y');        }        if (empty($month)) {            $month = Date_Calc::dateNow('%m');        }        if (empty($day)) {            $day = Date_Calc::dateNow('%d');        }        $days = Date_Calc::dateToDays($day,$month,$year);        if (Date_Calc::dayOfWeek($day,$month,$year) == 1) {            $days -= 3;        } elseif (Date_Calc::dayOfWeek($day,$month,$year) == 0) {            $days -= 2;        } else {            $days -= 1;        }        return(Date_Calc::daysToDate($days,$format));    } // end func prevWeekday    /**     * Returns date of the next specific day of the week     * from the given date.     *     * @param int day of week, 0=Sunday     * @param string day in format DD, default is current local day     * @param string month in format MM, default is current local month     * @param string year in format CCYY, default is current local year     * @param boolean onOrAfter if true and days are same, returns current day     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function nextDayOfWeek($dow,$day='',$month='',$year='',$format='%Y%m%d',$onOrAfter=false)    {        if (empty($year)) {            $year = Date_Calc::dateNow('%Y');        }        if (empty($month)) {            $month = Date_Calc::dateNow('%m');        }        if (empty($day)) {            $day = Date_Calc::dateNow('%d');        }        $days = Date_Calc::dateToDays($day,$month,$year);        $curr_weekday = Date_Calc::dayOfWeek($day,$month,$year);        if ($curr_weekday == $dow) {            if (!$onOrAfter) {                $days += 7;            }        }        elseif ($curr_weekday > $dow) {            $days += 7 - ( $curr_weekday - $dow );        } else {            $days += $dow - $curr_weekday;        }        return(Date_Calc::daysToDate($days,$format));    } // end func nextDayOfWeek    /**     * Returns date of the previous specific day of the week     * from the given date.     *     * @param int day of week, 0=Sunday     * @param string day in format DD, default is current local day     * @param string month in format MM, default is current local month     * @param string year in format CCYY, default is current local year     * @param boolean onOrBefore if true and days are same, returns current day     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function prevDayOfWeek($dow,$day='',$month='',$year='',$format='%Y%m%d',$onOrBefore=false)    {        if (empty($year)) {            $year = Date_Calc::dateNow('%Y');        }        if (empty($month)) {            $month = Date_Calc::dateNow('%m');        }        if (empty($day)) {            $day = Date_Calc::dateNow('%d');        }        $days = Date_Calc::dateToDays($day,$month,$year);        $curr_weekday = Date_Calc::dayOfWeek($day,$month,$year);        if ($curr_weekday == $dow) {            if (!$onOrBefore) {                $days -= 7;            }        }        elseif ($curr_weekday < $dow) {            $days -= 7 - ( $dow - $curr_weekday );        } else {            $days -= $curr_weekday - $dow;        }        return(Date_Calc::daysToDate($days,$format));    } // end func prevDayOfWeek    /**     * Returns date of the next specific day of the week     * on or after the given date.     *     * @param int day of week, 0=Sunday     * @param string day in format DD, default is current local day     * @param string month in format MM, default is current local month     * @param string year in format CCYY, default is current local year     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function nextDayOfWeekOnOrAfter($dow,$day='',$month='',$year='',$format='%Y%m%d')    {        return(Date_Calc::nextDayOfWeek($dow,$day,$month,$year,$format,true));    } // end func nextDayOfWeekOnOrAfter    /**     * Returns date of the previous specific day of the week     * on or before the given date.     *     * @param int day of week, 0=Sunday     * @param string day in format DD, default is current local day     * @param string month in format MM, default is current local month     * @param string year in format CCYY, default is current local year     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function prevDayOfWeekOnOrBefore($dow,$day='',$month='',$year='',$format='%Y%m%d')    {        return(Date_Calc::prevDayOfWeek($dow,$day,$month,$year,$format,true));    } // end func prevDayOfWeekOnOrAfter    /**     * Returns date of day after given date.     *     * @param string day in format DD, default is current local day     * @param string month in format MM, default is current local month     * @param string year in format CCYY, default is current local year     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function nextDay($day='',$month='',$year='',$format='%Y%m%d')    {        if (empty($year)) {            $year = Date_Calc::dateNow('%Y');        }        if (empty($month)) {            $month = Date_Calc::dateNow('%m');        }        if (empty($day)) {            $day = Date_Calc::dateNow('%d');        }        $days = Date_Calc::dateToDays($day,$month,$year);        return(Date_Calc::daysToDate($days + 1,$format));    } // end func nextDay    /**     * Returns date of day before given date.     *     * @param string day in format DD, default is current local day     * @param string month in format MM, default is current local month     * @param string year in format CCYY, default is current local year     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function prevDay($day='',$month='',$year='',$format='%Y%m%d')    {        if (empty($year)) {            $year = Date_Calc::dateNow('%Y');        }        if (empty($month)) {            $month = Date_Calc::dateNow('%m');        }        if (empty($day)) {            $day = Date_Calc::dateNow('%d');        }        $days = Date_Calc::dateToDays($day,$month,$year);        return(Date_Calc::daysToDate($days - 1,$format));    } // end func prevDay    /**     * Sets century for 2 digit year.     * 51-99 is 19, else 20     *     * @param string 2 digit year     *     * @access public     *     * @return string 4 digit year     */    function defaultCentury($year)    {        if (strlen($year) == 1) {            $year = "0$year";        }        if ($year > 50) {            return( "19$year" );        } else {            return( "20$year" );        }    } // end func defaultCentury    /**     * Returns number of days between two given dates.     *    * @param string $day1   day in format DD    * @param string $month1 month in format MM    * @param string $year1  year in format CCYY    * @param string $day2   day in format DD    * @param string $month2 month in format MM    * @param string $year2  year in format CCYY     *     * @access public     *     * @return int absolute number of days between dates,     *      -1 if there is an error.     */    function dateDiff($day1,$month1,$year1,$day2,$month2,$year2)    {        if (!Date_Calc::isValidDate($day1,$month1,$year1)) {            return -1;        }        if (!Date_Calc::isValidDate($day2,$month2,$year2)) {            return -1;        }        return(abs((Date_Calc::dateToDays($day1,$month1,$year1))                    - (Date_Calc::dateToDays($day2,$month2,$year2))));    } // end func dateDiff    /**    * Compares two dates    *    * @param string $day1   day in format DD    * @param string $month1 month in format MM    * @param string $year1  year in format CCYY    * @param string $day2   day in format DD    * @param string $month2 month in format MM    * @param string $year2  year in format CCYY    *    * @access public    * @return int 0 on equality, 1 if date 1 is greater, -1 if smaller    */    function compareDates($day1,$month1,$year1,$day2,$month2,$year2)    {        $ndays1 = Date_Calc::dateToDays($day1, $month1, $year1);        $ndays2 = Date_Calc::dateToDays($day2, $month2, $year2);        if ($ndays1 == $ndays2) {            return 0;        }        return ($ndays1 > $ndays2) ? 1 : -1;    } // end func compareDates    /**     * Find the number of days in the given month.     *     * @param string month in format MM, default is current local month     * @param string year in format CCYY, default is current local year     *     * @access public     *     * @return int number of days     */    function daysInMonth($month='',$year='')    {        if (empty($year)) {            $year = Date_Calc::dateNow('%Y');        }        if (empty($month)) {            $month = Date_Calc::dateNow('%m');        }        if ($year == 1582 && $month == 10) {            return 21;  // October 1582 only had 1st-4th and 15th-31st        }        if ($month == 2) {            if (Date_Calc::isLeapYear($year)) {                return 29;             } else {                return 28;            }        } elseif ($month == 4 or $month == 6 or $month == 9 or $month == 11) {            return 30;        } else {            return 31;        }    } // end func daysInMonth    /**     * Returns the number of rows on a calendar month. Useful for     * determining the number of rows when displaying a typical     * month calendar.     *     * @param string month in format MM, default is current local month     * @param string year in format CCYY, default is current local year     *     * @access public     *     * @return int number of weeks     */    function weeksInMonth($month='',$year='')    {        if (empty($year)) {            $year = Date_Calc::dateNow('%Y');        }        if (empty($month)) {            $month = Date_Calc::dateNow('%m');        }        $FDOM = Date_Calc::firstOfMonthWeekday($month, $year);        if (DATE_CALC_BEGIN_WEEKDAY==1 && $FDOM==0) {            $first_week_days = 7 - $FDOM + DATE_CALC_BEGIN_WEEKDAY;            $weeks = 1;        } elseif (DATE_CALC_BEGIN_WEEKDAY==0 && $FDOM == 6) {            $first_week_days = 7 - $FDOM + DATE_CALC_BEGIN_WEEKDAY;            $weeks = 1;        } else {            $first_week_days = DATE_CALC_BEGIN_WEEKDAY - $FDOM;            $weeks = 0;        }

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?