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 + -
显示快捷键?