⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 calc.php

📁 一个基于web的开源项目管理工具
💻 PHP
📖 第 1 页 / 共 4 页
字号:
    /**     * 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 current local month     * @param string year in format YYCC, default current local year     *     * @access public     *     * @return int number of weeks     */    function weeksInMonth($month="",$year="",$fdow=null)    {        if(empty($year))            $year = Date_Calc::dateNow("%Y");        if(empty($month))            $month = Date_Calc::dateNow("%m");        if($fdow === null)            $fdow = DATE_CALC_BEGIN_WEEKDAY;        if($fdow == 1)        {            if(Date_Calc::firstOfMonthWeekday($month,$year) == 0)                $first_week_days = 1;            else                $first_week_days = 7 - (Date_Calc::firstOfMonthWeekday($month,$year) - 1);        }        else            $first_week_days = 7 - Date_Calc::firstOfMonthWeekday($month,$year);        return ceil(((Date_Calc::daysInMonth($month,$year) - $first_week_days) / 7) + 1);    } // end func weeksInMonth    /**     * Find the day of the week for the first of the month of given date.     *     * @param string year in format CCYY, default to current local year     * @param string month in format MM, default to current local month     *     * @access public     *     * @return int number of weekday for the first day, 0=Sunday     */    function firstOfMonthWeekday($month="",$year="")    {        if(empty($year))            $year = Date_Calc::dateNow("%Y");        if(empty($month))            $month = Date_Calc::dateNow("%m");        return(Date_Calc::dayOfWeek("01",$month,$year));    } // end func firstOfMonthWeekday    /**     * Return date of first day of month of given date.     *     * @param string year in format CCYY, default current local year     * @param string month in format MM, default current local month     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function beginOfMonth($month="",$year="",$format="%Y%m%d")    {        if(empty($year))            $year = Date_Calc::dateNow("%Y");        if(empty($month))            $month = Date_Calc::dateNow("%m");        return(Date_Calc::dateFormat("01",$month,$year,$format));    } // end of func beginOfMonth    /**     * Find the month day of the beginning of week for given date,     * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.)     *     * @param string year in format CCYY, default current local year     * @param string month in format MM, default current local month     * @param string day in format DD, default current local day     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function beginOfWeek($day="",$month="",$year="",$format="%Y%m%d",$fdow=null)    {        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($fdow === null)            $fdow = DATE_CALC_BEGIN_WEEKDAY;        $this_weekday = Date_Calc::dayOfWeek($day,$month,$year);        if($fdow == 1)        {            if($this_weekday == 0)                $beginOfWeek = Date_Calc::dateToDays($day,$month,$year) - 6;            else                $beginOfWeek = Date_Calc::dateToDays($day,$month,$year)                    - $this_weekday + 1;        }        else                $beginOfWeek = (Date_Calc::dateToDays($day,$month,$year)                    - $this_weekday);       /*  $beginOfWeek = (Date_Calc::dateToDays($day,$month,$year)            - ($this_weekday - $fdow)); */        return(Date_Calc::daysToDate($beginOfWeek,$format));    } // end of func beginOfWeek    /**     * Find the month day of the end of week for given date,     * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday     * of following month.)     *     * @param string year in format CCYY, default current local year     * @param string month in format MM, default current local month     * @param string day in format DD, default current local day     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function endOfWeek($day="",$month="",$year="",$format="%Y%m%d",$fdow=null)    {        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($fdow === null)            $fdow = DATE_CALC_BEGIN_WEEKDAY;        $this_weekday = Date_Calc::dayOfWeek($day,$month,$year);        $last_dayOfWeek = (Date_Calc::dateToDays($day,$month,$year)            + (6 - $this_weekday + $fdow));        return(Date_Calc::daysToDate($last_dayOfWeek,$format));    } // end func endOfWeek    /**     * Find the month day of the beginning of week after given date,     * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.)     *     * @param string year in format CCYY, default current local year     * @param string month in format MM, default current local month     * @param string day in format DD, default current local day     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function beginOfNextWeek($day="",$month="",$year="",$format="%Y%m%d",$fdow=null)    {        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($fdow === null)            $fdow = DATE_CALC_BEGIN_WEEKDAY;        $date = Date_Calc::daysToDate(Date_Calc::dateToDays($day+7,$month,$year),"%Y%m%d");        $next_week_year = substr($date,0,4);        $next_week_month = substr($date,4,2);        $next_week_day = substr($date,6,2);        $this_weekday = Date_Calc::dayOfWeek($next_week_day,$next_week_month,$next_week_year);        $beginOfWeek = (Date_Calc::dateToDays($next_week_day,$next_week_month,$next_week_year)            - ($this_weekday - $fdow));        return(Date_Calc::daysToDate($beginOfWeek,$format));    } // end func beginOfNextWeek    /**     * Find the month day of the beginning of week before given date,     * using DATE_CALC_BEGIN_WEEKDAY. (can return weekday of prev month.)     *     * @param string year in format CCYY, default current local year     * @param string month in format MM, default current local month     * @param string day in format DD, default current local day     * @param string format for returned date     *     * @access public     *     * @return string date in given format     */    function beginOfPrevWeek($day="",$month="",$year="",$format="%Y%m%d",$fdow=null)    {        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($fdow === null)            $fdow = DATE_CALC_BEGIN_WEEKDAY;        $date = Date_Calc::daysToDate(Date_Calc::dateToDays($day-7,$month,$year),"%Y%m%d");        $next_week_year = substr($date,0,4);        $next_week_month = substr($date,4,2);        $next_week_day = substr($date,6,2);        $this_weekday = Date_Calc::dayOfWeek($next_week_day,$next_week_month,$next_week_year);        $beginOfWeek = (Date_Calc::dateToDays($next_week_day,$next_week_month,$next_week_year)            - ($this_weekday - $fdow));        return(Date_Calc::daysToDate($beginOfWeek,$format));    } // end func beginOfPrevWeek    /**     * Return an array with days in week     *     * @param string year in format CCYY, default current local year     * @param string month in format MM, default current local month     * @param string day in format DD, default current local day     * @param string format for returned date     *     * @access public     *     * @return array $week[$weekday]     */    function getCalendarWeek($day="",$month="",$year="",$format="%Y%m%d",$fdow=null)    {        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($fdow === null)            $fdow = DATE_CALC_BEGIN_WEEKDAY;        $week_array = array();        // date for the column of week        $curr_day = Date_Calc::beginOfWeek($day,$month,$year,"%E",$fdow);            for($counter=0; $counter <= 6; $counter++)            {                $week_array[$counter] = Date_Calc::daysToDate($curr_day,$format);                $curr_day++;            }        return $week_array;    } // end func getCalendarWeek    /**     * Return a set of arrays to construct a calendar month for     * the given date.     *     * @param string year in format CCYY, default current local year     * @param string month in format MM, default current local month     * @param string format for returned date     *     * @access public     *     * @return array $month[$row][$col]     */    function getCalendarMonth($month="",$year="",$format="%Y%m%d",$fdow=null)    {        if(empty($year))            $year = Date_Calc::dateNow("%Y");        if(empty($month))            $month = Date_Calc::dateNow("%m");        if($fdow === null)            $fdow = DATE_CALC_BEGIN_WEEKDAY;        $month_array = array();        // date for the first row, first column of calendar month        if($fdow == 1)        {            if(Date_Calc::firstOfMonthWeekday($month,$year) == 0)                $curr_day = Date_Calc::dateToDays("01",$month,$year) - 6;            else                $curr_day = Date_Calc::dateToDays("01",$month,$year)                    - Date_Calc::firstOfMonthWeekday($month,$year) + 1;        }        else                $curr_day = (Date_Calc::dateToDays("01",$month,$year)                    - Date_Calc::firstOfMonthWeekday($month,$year));        // number of days in this month        $daysInMonth = Date_Calc::daysInMonth($month,$year);        $weeksInMonth = Date_Calc::weeksInMonth($month,$year,$fdow);        for($row_counter=0; $row_counter < $weeksInMonth; $row_counter++)        {            for($column_counter=0; $column_counter <= 6; $column_counter++)            {                $month_array[$row_counter][$column_counter] = Date_Calc::daysToDate($curr_day,$format);                $curr_day++;            }        }        return $month_array;    } // end func getCalendarMonth    /**     * Return a set of arrays to construct a calendar year for     * the given date.     *     * @param string year in format CCYY, default current local year     * @param string format for returned date     *     * @access public     *     * @return array $year[$month][$row][$col]     */    function getCalendarYear($year="",$format="%Y%m%d")    {        if(empty($year))            $year = Date_Calc::dateNow("%Y");        $year_array = array();        for($curr_month=0; $curr_month <=11; $curr_month++)            $year_array[$curr_month] = Date_Calc::getCalendarMonth(sprintf("%02d",$curr_month+1),$year,$format);        return $year_array;    } // end func getCalendarYear    /**     * Converts a date to number of days since a     * distant unspecified epoch.     *     * @param string year in format CCYY     * @param string month in format MM     * @param string day in format DD     *     * @access public     *     * @return integer number of days     */    function dateToDays($day,$month,$year)    {        $century = substr($year,0,2);        $year = substr($year,2,2);        if($month > 2)            $month -= 3;        else        {            $month += 9;            if($year)                $year--;            else            {                $year = 99;                $century --;            }        }        return ( floor((  146097 * $century)    /  4 ) +                floor(( 1461 * $year)        /  4 ) +                floor(( 153 * $month +  2) /  5 ) +                    $day +  1721119);

⌨️ 快捷键说明

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