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

📄 calc.php

📁 apache windows下的一款好
💻 PHP
📖 第 1 页 / 共 4 页
字号:

    } // 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 current local month
     * @param string year in format YYCC, default 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");

	if(DATE_CALC_BEGIN_WEEKDAY == 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")
    {
        if(empty($year))
            $year = Date_Calc::dateNow("%Y");
        if(empty($month))
            $month = Date_Calc::dateNow("%m");
        if(empty($day))
            $day = Date_Calc::dateNow("%d");

        $this_weekday = Date_Calc::dayOfWeek($day,$month,$year);

	if(DATE_CALC_BEGIN_WEEKDAY == 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 - DATE_CALC_BEGIN_WEEKDAY)); */

        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")
    {
        if(empty($year))
            $year = Date_Calc::dateNow("%Y");
        if(empty($month))
            $month = Date_Calc::dateNow("%m");
        if(empty($day))
            $day = Date_Calc::dateNow("%d");

        $this_weekday = Date_Calc::dayOfWeek($day,$month,$year);

        $last_dayOfWeek = (Date_Calc::dateToDays($day,$month,$year)
            + (6 - $this_weekday + DATE_CALC_BEGIN_WEEKDAY));

        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")
    {
        if(empty($year))
            $year = Date_Calc::dateNow("%Y");
        if(empty($month))
            $month = Date_Calc::dateNow("%m");
        if(empty($day))
            $day = Date_Calc::dateNow("%d");

        $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 - DATE_CALC_BEGIN_WEEKDAY));

        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")
    {
        if(empty($year))
            $year = Date_Calc::dateNow("%Y");
        if(empty($month))
            $month = Date_Calc::dateNow("%m");
        if(empty($day))
            $day = Date_Calc::dateNow("%d");

        $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 - DATE_CALC_BEGIN_WEEKDAY));

        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")
    {
        if(empty($year))
            $year = Date_Calc::dateNow("%Y");
        if(empty($month))
            $month = Date_Calc::dateNow("%m");
        if(empty($day))
            $day = Date_Calc::dateNow("%d");

        $week_array = array();

        // date for the column of week

        $curr_day = Date_Calc::beginOfWeek($day,$month,$year,"%E");

            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")
    {
        if(empty($year))
            $year = Date_Calc::dateNow("%Y");
        if(empty($month))
            $month = Date_Calc::dateNow("%m");

        $month_array = array();

        // date for the first row, first column of calendar month
	if(DATE_CALC_BEGIN_WEEKDAY == 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);
        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 + -