本文整理汇总了PHP中Date_Calc::daysInMonth方法的典型用法代码示例。如果您正苦于以下问题:PHP Date_Calc::daysInMonth方法的具体用法?PHP Date_Calc::daysInMonth怎么用?PHP Date_Calc::daysInMonth使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Date_Calc
的用法示例。
在下文中一共展示了Date_Calc::daysInMonth方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: NWeekdayOfMonth
/**
* Calculates the date of the Nth weekday of the month,
* such as the second Saturday of January 2000.
*
* @param string occurance: 1=first, 2=second, 3=third, etc.
* @param string dayOfWeek: 0=Sunday, 1=Monday, etc.
* @param string year in format CCYY
* @param string month in format MM
* @param string format for returned date
*
* @access public
*
* @return string date in given format
*/
function NWeekdayOfMonth($occurance, $dayOfWeek, $month, $year, $format = "%Y%m%d")
{
$year = sprintf("%04d", $year);
$month = sprintf("%02d", $month);
$DOW1day = sprintf("%02d", ($occurance - 1) * 7 + 1);
$DOW1 = Date_Calc::dayOfWeek($DOW1day, $month, $year);
$wdate = ($occurance - 1) * 7 + 1 + (7 + $dayOfWeek - $DOW1) % 7;
if ($wdate > Date_Calc::daysInMonth($month, $year)) {
return -1;
} else {
return Date_Calc::dateFormat($wdate, $month, $year, $format);
}
}
示例2: getDaysInMonth
/**
* Gets number of days in the month for this date
*
* Gets number of days in the month for this date
*
* @access public
* @return int number of days in this month
*/
function getDaysInMonth()
{
return Date_Calc::daysInMonth($this->month, $this->year);
}
示例3: nWeekdayOfMonth
/**
* Calculates the date of the Nth weekday of the month,
* such as the second Saturday of January 2000
*
* @param int $week the number of the week to get
* (1 = first, etc. Also can be 'last'.)
* @param int $dow the day of the week (0 = Sunday)
* @param int $month the month
* @param int $year the year. Use the complete year instead of the
* abbreviated version. E.g. use 2005, not 05.
* @param string $format the string indicating how to format the output
*
* @return string the date in the desired format
* @access public
* @static
*/
function nWeekdayOfMonth($week, $dow, $month, $year, $format = DATE_CALC_FORMAT)
{
if (is_numeric($week)) {
$DOW1day = ($week - 1) * 7 + 1;
$DOW1 = Date_Calc::dayOfWeek($DOW1day, $month, $year);
$wdate = ($week - 1) * 7 + 1 + (7 + $dow - $DOW1) % 7;
if ($wdate > Date_Calc::daysInMonth($month, $year)) {
return -1;
} else {
return Date_Calc::dateFormat($wdate, $month, $year, $format);
}
} elseif ($week == 'last' && $dow < 7) {
$lastday = Date_Calc::daysInMonth($month, $year);
$lastdow = Date_Calc::dayOfWeek($lastday, $month, $year);
$diff = $dow - $lastdow;
if ($diff > 0) {
return Date_Calc::dateFormat($lastday - (7 - $diff), $month, $year, $format);
} else {
return Date_Calc::dateFormat($lastday + $diff, $month, $year, $format);
}
} else {
return -1;
}
}
示例4: getDaysInMonth
/**
* Returns the number of days in a month, given year and month
* @param int year (2003)
* @param int month (9)
* @return int days in month
* @access protected
*/
function getDaysInMonth($y, $m)
{
return (int) Date_Calc::daysInMonth($m, $y);
}
示例5: getSummerTimeLimitDay
/**
* Returns day on which Summer time starts or ends for given year
*
* The limit (start or end) code can take the following forms:
* 5 the fifth of the month
* lastSun the last Sunday in the month
* lastMon the last Monday in the month
* Sun>=8 first Sunday on or after the 8th
* Sun<=25 last Sunday on or before the 25th
*
* @param string $ps_summertimelimitcode code which specifies Summer time
* limit day
* @param int $pn_month start or end month
* @param int $pn_year year for which to calculate Summer
* time limit day
*
* @return int
* @access private
* @since Method available since Release 1.5.0
*/
function getSummerTimeLimitDay($ps_summertimelimitcode, $pn_month, $pn_year)
{
if (preg_match('/^[0-9]+$/', $ps_summertimelimitcode)) {
$hn_day = $ps_summertimelimitcode;
} else {
if (!isset($ha_daysofweek)) {
static $ha_daysofweek = array("Sun" => 0, "Mon" => 1, "Tue" => 2, "Wed" => 3, "Thu" => 4, "Fri" => 5, "Sat" => 6);
}
if (preg_match('/^last(Sun|Mon|Tue|Wed|Thu|Fri|Sat)$/', $ps_summertimelimitcode, $ha_matches)) {
list($hn_nmyear, $hn_nextmonth, $hn_nmday) = explode(" ", Date_Calc::beginOfMonthBySpan(1, $pn_month, $pn_year, "%Y %m %d"));
list($hn_year, $hn_month, $hn_day) = explode(" ", Date_Calc::prevDayOfWeek($ha_daysofweek[$ha_matches[1]], $hn_nmday, $hn_nextmonth, $hn_nmyear, "%Y %m %d", false));
// not including
// this day
if ($hn_month != $pn_month) {
// This code happen legitimately if the calendar jumped some days
// e.g. in a calendar switch, or the limit day is badly defined:
//
$hn_day = Date_Calc::getFirstDayOfMonth($pn_month, $pn_year);
}
} else {
if (preg_match('/^(Sun|Mon|Tue|Wed|Thu|Fri|Sat)([><]=)([0-9]+)$/', $ps_summertimelimitcode, $ha_matches)) {
if ($ha_matches[2] == "<=") {
list($hn_year, $hn_month, $hn_day) = explode(" ", Date_Calc::prevDayOfWeek($ha_daysofweek[$ha_matches[1]], $ha_matches[3], $pn_month, $pn_year, "%Y %m %d", true));
// including
// this day
if ($hn_month != $pn_month) {
$hn_day = Date_Calc::getFirstDayOfMonth($pn_month, $pn_year);
}
} else {
list($hn_year, $hn_month, $hn_day) = explode(" ", Date_Calc::nextDayOfWeek($ha_daysofweek[$ha_matches[1]], $ha_matches[3], $pn_month, $pn_year, "%Y %m %d", true));
// including
// this day
if ($hn_month != $pn_month) {
$hn_day = Date_Calc::daysInMonth($pn_month, $pn_year);
}
}
}
}
}
return $hn_day;
}
示例6: NWeekdayOfMonth
/**
* Calculates the date of the Nth weekday of the month,
* such as the second Saturday of January 2000.
*
* @param string occurance: 1=first, 2=second, 3=third, etc.
* @param string dayOfWeek: 0=Sunday, 1=Monday, etc.
* @param string year in format CCYY
* @param string month in format MM
* @param string format for returned date
*
* @access public
*
* @return string date in given format
*/
public function NWeekdayOfMonth($occurance, $dayOfWeek, $month, $year, $format = "%Y-%m-%d")
{
$year = sprintf("%04d", $year);
$month = sprintf("%02d", $month);
$DOW1day = sprintf("%02d", ($occurance - 1) * 7 + 1);
$DOW1 = Date_Calc::dayOfWeek($DOW1day, $month, $year);
$wdate = ($occurance - 1) * 7 + 1 + (7 + $dayOfWeek - $DOW1) % 7;
if ($wdate > Date_Calc::daysInMonth($month, $year)) {
if ($occurance == 5) {
// Getting the last day overshot the month, go back a week
$wdate -= 7;
return Date_Calc::dateFormat($wdate, $month, $year, $format);
} else {
// For $occurance === 1 through 4 this is an error
return -1;
}
} else {
return Date_Calc::dateFormat($wdate, $month, $year, $format);
}
}
示例7: postcalendar_calendarblock_display
/**
* display block
*/
function postcalendar_calendarblock_display($blockinfo)
{
// You supposed to be here?
if (!pnSecAuthAction(0, 'PostCalendar:calendarblock:', "{$blockinfo['title']}::", ACCESS_OVERVIEW)) {
return false;
}
// find out what view we're using
$template_view = pnVarCleanFromInput('tplview');
if (!isset($template_view)) {
$template_view = 'default';
}
// find out what template we're using
$template_name = _SETTING_TEMPLATE;
if (!isset($template_name) || empty($template_name)) {
$template_name = 'default';
}
// What is today's correct date
$Date =& postcalendar_getDate();
// Get variables from content block
$vars = unserialize($blockinfo['content']);
$showcalendar = $vars['pcbshowcalendar'];
$showevents = $vars['pcbeventoverview'];
$eventslimit = $vars['pcbeventslimit'];
$nextevents = $vars['pcbnextevents'];
$pcbshowsslinks = $vars['pcbshowsslinks'];
$pcbeventsrange = $vars['pcbeventsrange'];
// Let's setup the info to build this sucka!
$the_year = substr($Date, 0, 4);
$the_month = substr($Date, 4, 2);
$the_day = substr($Date, 6, 2);
$uid = pnUserGetVar('uid');
$cacheid1 = $cacheid2 = $cacheid3 = '';
$theme = pnUserGetTheme();
pnThemeLoad($theme);
global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5;
global $textcolor1, $textcolor2;
// 20021125 - rraymond :: we have to do this to make it work with envolution
$pcModInfo = pnModGetInfo(pnModGetIDFromName(__POSTCALENDAR__));
$pcDir = pnVarPrepForOS($pcModInfo['directory']);
require_once "modules/{$pcDir}/pnincludes/Smarty/Config_File.class.php";
unset($pcModInfo);
// set up Smarty
$tpl =& new pcSmarty();
// setup the Smarty cache id
$templates_cached = true;
if ($showcalendar) {
$cacheid1 = md5($Date . 'M' . $template_view . $template_name . $showcalendar . $showevents . $nextevents . $uid . $theme);
if (!$tpl->is_cached($template_name . '/views/calendarblock/month_view.html', $cacheid1)) {
$templates_cached = false;
}
}
if ($showevents) {
$cacheid2 = md5($Date . 'T' . $template_view . $template_name . $showcalendar . $showevents . $nextevents . $uid . $theme);
if (!$tpl->is_cached($template_name . '/views/calendarblock/todays_events.html', $cacheid2)) {
$templates_cached = false;
}
}
if ($nextevents) {
$cacheid3 = md5($Date . 'U' . $template_view . $template_name . $showcalendar . $showevents . $nextevents . $uid . $theme);
if (!$tpl->is_cached($template_name . '/views/calendarblock/upcoming_events.html', $cacheid3)) {
$templates_cached = false;
}
}
// start the output container
$output = pnModAPIFunc(__POSTCALENDAR__, 'user', 'pageSetup');
// if one of the templates is not cached, we need to run the following
if (!$templates_cached) {
// set up the next and previous months to move to
$prev_month = Date_Calc::beginOfPrevMonth(1, $the_month, $the_year, '%Y%m%d');
$next_month = Date_Calc::beginOfNextMonth(1, $the_month, $the_year, '%Y%m%d');
$last_day = Date_Calc::daysInMonth($the_month, $the_year);
$pc_prev = pnModURL(__POSTCALENDAR__, 'user', 'view', array('tplview' => $template_view, 'viewtype' => 'month', 'Date' => $prev_month));
$pc_next = pnModURL(__POSTCALENDAR__, 'user', 'view', array('tplview' => $template_view, 'viewtype' => 'month', 'Date' => $next_month));
$pc_month_name = pnModAPIFunc(__POSTCALENDAR__, 'user', 'getmonthname', array('Date' => mktime(0, 0, 0, $the_month, $the_day, $the_year)));
$month_link_url = pnModURL(__POSTCALENDAR__, 'user', 'view', array('tplview' => $template_view, 'viewtype' => 'month', 'Date' => date('Ymd', mktime(0, 0, 0, $the_month, 1, $the_year))));
$month_link_text = $pc_month_name . ' ' . $the_year;
//*******************************************************************
// Here we get the events for the current month view
//*******************************************************************
$day_of_week = 1;
$pc_month_names = array(_CALJAN, _CALFEB, _CALMAR, _CALAPR, _CALMAY, _CALJUN, _CALJUL, _CALAUG, _CALSEP, _CALOCT, _CALNOV, _CALDEC);
$pc_short_day_names = array(_CALSUNDAYSHORT, _CALMONDAYSHORT, _CALTUESDAYSHORT, _CALWEDNESDAYSHORT, _CALTHURSDAYSHORT, _CALFRIDAYSHORT, _CALSATURDAYSHORT);
$pc_long_day_names = array(_CALSUNDAY, _CALMONDAY, _CALTUESDAY, _CALWEDNESDAY, _CALTHURSDAY, _CALFRIDAY, _CALSATURDAY);
switch (_SETTING_FIRST_DAY_WEEK) {
case _IS_MONDAY:
$pc_array_pos = 1;
$first_day = date('w', mktime(0, 0, 0, $the_month, 0, $the_year));
$end_dow = date('w', mktime(0, 0, 0, $the_month, $last_day, $the_year));
if ($end_dow != 0) {
$the_last_day = $last_day + (7 - $end_dow);
} else {
$the_last_day = $last_day;
}
break;
case _IS_SATURDAY:
$pc_array_pos = 6;
$first_day = date('w', mktime(0, 0, 0, $the_month, 2, $the_year));
//.........这里部分代码省略.........
示例8: getTableViewCells
/**
* @param $start
* @param $startNext
* @param string $view
* @param int $firstWeekDay
* @return array
*/
function getTableViewCells($start, $startNext, $view = 'month', $firstWeekDay = 0)
{
// start of the view
$viewStart = $start;
$nbBackDays = $start['weekDay'] < $firstWeekDay ? 6 : $start['weekDay'] - $firstWeekDay;
if ($nbBackDays == 0) {
$viewStart['daysInMonth'] = Date_Calc::daysInMonth($viewStart['month'], $viewStart['year']);
} elseif ($start['day'] - $nbBackDays < 0) {
$viewStart['month'] = $start['month'] == 1 ? 12 : $start['month'] - 1;
$viewStart['year'] = $start['month'] == 1 ? $start['year'] - 1 : $start['year'];
$viewStart['daysInMonth'] = Date_Calc::daysInMonth($viewStart['month'], $viewStart['year']);
$viewStart['day'] = $viewStart['daysInMonth'] - $nbBackDays + 1;
$viewStart['date'] = TikiLib::make_time(0, 0, 0, $viewStart['month'], $viewStart['day'], $viewStart['year']);
} else {
$viewStart['daysInMonth'] = Date_Calc::daysInMonth($viewStart['month'], $viewStart['year']);
$viewStart['day'] = $viewStart['day'] - $nbBackDays;
$viewStart['date'] = TikiLib::make_time(0, 0, 0, $viewStart['month'], $viewStart['day'], $viewStart['year']);
}
// echo '<br/>VIEWSTART'; print_r($viewStart);
// end of the period
$cell = array();
for ($ilign = 0, $icol = 0, $loop = $viewStart, $weekDay = $viewStart['weekDay'];;) {
if ($loop['date'] >= $startNext['date'] && $icol == 0) {
break;
}
$cell[$ilign][$icol] = $loop;
$cell[$ilign][$icol]['focus'] = $loop['date'] < $start['date'] || $loop['date'] >= $startNext['date'] ? false : true;
$cell[$ilign][$icol]['weekDay'] = $weekDay;
$weekDay = ($weekDay + 1) % 7;
if ($icol >= 6) {
++$ilign;
$icol = 0;
} else {
++$icol;
}
if ($loop['day'] >= $loop['daysInMonth']) {
$loop['day'] = 1;
if ($loop['month'] == 12) {
$loop['month'] = 1;
$loop['year'] += 1;
} else {
$loop['month'] += 1;
}
$loop['daysInMonth'] = Date_Calc::daysInMonth($loop['month'], $loop['year']);
} else {
$loop['day'] = $loop['day'] + 1;
}
$loop['date'] = TikiLib::make_time(0, 0, 0, $loop['month'], $loop['day'], $loop['year']);
}
//echo '<pre>CELL'; print_r($cell); echo '</pre>';
return $cell;
}
示例9: postcalendar_userapi_buildView
//.........这里部分代码省略.........
if (!isset($template_view)) {
$template_view = 'default';
}
//=================================================================
// See if the template view exists
//=================================================================
if (!file_exists("modules/{$pcDir}/pntemplates/{$template_name}/views/{$viewtype}/{$template_view}.html")) {
$template_view_load = 'default';
} else {
$template_view_load = pnVarPrepForOS($template_view);
}
//=================================================================
// Grab the current theme information
//=================================================================
pnThemeLoad(pnUserGetTheme());
global $bgcolor1, $bgcolor2, $bgcolor3, $bgcolor4, $bgcolor5, $bgcolor6, $textcolor1, $textcolor2;
//=================================================================
// Insert necessary JavaScript into the page
//=================================================================
$output = pnModAPIFunc(__POSTCALENDAR__, 'user', 'pageSetup');
//=================================================================
// Setup Smarty Template Engine
//=================================================================
$tpl = new pcSmarty();
//if(!$tpl->is_cached("$template_name/views/$viewtype/$template_view_load.html",$cacheid)) {
//diable caching completely
if (true) {
//=================================================================
// Let's just finish setting things up
//=================================================================
$the_year = substr($Date, 0, 4);
$the_month = substr($Date, 4, 2);
$the_day = substr($Date, 6, 2);
$last_day = Date_Calc::daysInMonth($the_month, $the_year);
//=================================================================
// populate the template object with information for
// Month Names, Long Day Names and Short Day Names
// as translated in the language files
// (may be adding more here soon - based on need)
//=================================================================
$pc_month_names = array(_CALJAN, _CALFEB, _CALMAR, _CALAPR, _CALMAY, _CALJUN, _CALJUL, _CALAUG, _CALSEP, _CALOCT, _CALNOV, _CALDEC);
$pc_short_day_names = array(_CALSUNDAYSHORT, _CALMONDAYSHORT, _CALTUESDAYSHORT, _CALWEDNESDAYSHORT, _CALTHURSDAYSHORT, _CALFRIDAYSHORT, _CALSATURDAYSHORT);
$pc_long_day_names = array(_CALSUNDAY, _CALMONDAY, _CALTUESDAY, _CALWEDNESDAY, _CALTHURSDAY, _CALFRIDAY, _CALSATURDAY);
//=================================================================
// here we need to set up some information for later
// variable creation. This helps us establish the correct
// date ranges for each view. There may be a better way
// to handle all this, but my brain hurts, so your comments
// are very appreciated and welcomed.
//=================================================================
switch (_SETTING_FIRST_DAY_WEEK) {
case _IS_MONDAY:
$pc_array_pos = 1;
$first_day = date('w', mktime(0, 0, 0, $the_month, 0, $the_year));
$week_day = date('w', mktime(0, 0, 0, $the_month, $the_day - 1, $the_year));
$end_dow = date('w', mktime(0, 0, 0, $the_month, $last_day, $the_year));
if ($end_dow != 0) {
$the_last_day = $last_day + (7 - $end_dow);
} else {
$the_last_day = $last_day;
}
break;
case _IS_SATURDAY:
$pc_array_pos = 6;
$first_day = date('w', mktime(0, 0, 0, $the_month, 2, $the_year));
$week_day = date('w', mktime(0, 0, 0, $the_month, $the_day + 1, $the_year));
示例10:
if ($wd > 0 and $viewlist != 'list') {
$viewstart_d = TikiLib::date_format("%d", $viewstart);
$viewstart_m = TikiLib::date_format("%m", $viewstart);
$viewstart_y = TikiLib::date_format("%Y", $viewstart);
// Start in previous month if $wd is greater than the current day (relative to th current month)
if ($viewstart_d <= $wd) {
// $tikilib->make_time() used with timezones doesn't support month = 0
if ($viewstart_m == 1) {
$viewstart_m = 12;
$viewstart_y--;
} else {
$viewstart_m--;
}
// $tikilib->make_time() used with timezones doesn't support day = 0
// This supposes that $viewstart's day == 1, as defined above
$viewstart_d = Date_Calc::daysInMonth($viewstart_m, $viewstart_y) - ($wd - $viewstart_d);
} else {
$viewstart_d -= $wd;
}
$viewstart = $tikilib->make_time(0, 0, 0, $viewstart_m, $viewstart_d, $viewstart_y);
}
$daystart = $viewstart;
// then go to the end of the week for $viewend
// $viewend = $viewstart + (7 * $d) - 1;
$viewend = $tikilib->make_time(0, 0, 0, TikiLib::date_format("%m", $daystart), TikiLib::date_format("%d", $daystart) + 7, TikiLib::date_format("%Y", $daystart)) - 1;
$dayend = $viewend;
$numberofweeks = 0;
} else {
$firstweek = $currentweek;
$lastweek = $currentweek;
// $viewend = $viewstart + ($d - 1);
示例11: _getArticleCorrectedDatePeriod
/**
* @private
* Caculate the correct article date period
*/
function _getArticleCorrectedDatePeriod()
{
$blogSettings = $this->_blogInfo->getSettings();
$serverTimeOffset = $blogSettings->getValue("time_offset");
if ($serverTimeOffset == 0) {
$this->_maxDate = -1;
} else {
if (strlen($this->_date) == 4) {
$year = $this->_date;
$this->_date = Timestamp::getDateWithOffset($year . "0101000000", -$serverTimeOffset);
$this->_maxDate = Timestamp::getDateWithOffset($year . "1231235959", -$serverTimeOffset);
} elseif (strlen($this->_date) == 6) {
$year = substr($this->_date, 0, 4);
$month = substr($this->_date, 4, 2);
$dayOfMonth = Date_Calc::daysInMonth($month, $year);
$this->_date = Timestamp::getDateWithOffset($year . $month . "01000000", -$serverTimeOffset);
$this->_maxDate = Timestamp::getDateWithOffset($year . $month . $dayOfMonth . "235959", -$serverTimeOffset);
} elseif (strlen($this->_date) == 8) {
$year = substr($this->_date, 0, 4);
$month = substr($this->_date, 4, 2);
$day = substr($this->_date, 6, 2);
$this->_date = Timestamp::getDateWithOffset($year . $month . $day . "000000", -$serverTimeOffset);
$this->_maxDate = Timestamp::getDateWithOffset($year . $month . $day . "235959", -$serverTimeOffset);
} else {
$this->_maxDate = -1;
}
}
}
示例12: MakeRecurrences
public function MakeRecurrences()
{
global $_EV_CONF;
$days_on = $this->event->rec_data['listdays'];
if (!is_array($days_on)) {
return $this->events;
}
$occurrence = $this->dt_start;
$num_intervals = count($days_on);
$last_interval = $days_on[$num_intervals - 1];
// Start by reducing the starting date by one day. Then the for
// loop can handle all the events.
list($y, $m, $d) = explode('-', $occurrence);
//$occurrence = Date_Calc::prevDay($d, $m, $y);
//$count = 1;
$count = 0;
while ($occurrence <= $this->event->rec_data['stop'] && $count < $_EV_CONF['max_repeats']) {
$lastday = Date_Calc::daysInMonth($m, $y);
// last day in month
foreach ($days_on as $dom) {
if ($dom == 32) {
$dom = $lastday;
} elseif ($dom > $lastday) {
break;
}
$occurrence = sprintf("%d-%02d-%02d", $y, $m, $dom);
// We might pick up some earlier instances, skip them
if ($occurrence < $this->dt_start) {
continue;
}
// Stop when we hit the stop date
if ($occurrence > $this->event->rec_data['stop']) {
break;
}
if ($this->skip > 0) {
$occurrence = $this->SkipWeekend($occurrence);
}
if ($occurrence != NULL) {
$this->storeEvent($occurrence);
$count++;
}
if ($count > $_EV_CONF['max_repeats']) {
break;
}
//list($y, $m, $d) = explode('-', $occurrence);
}
// foreach days_on
// Increment the month
$m += $this->event->rec_data['freq'];
if ($m > 12) {
// Roll over to next year
$y += 1;
$m = $m - 12;
}
}
// while not at stop date
return $this->events;
}
示例13: handle_month_recurrence
/**
* Specifically handle month recurrence
*
* This method will take care of parsing the month
* recurrence data and correctly rescheduling a
* scan if the recurrence time has been met
*
* @param array $parameters Array of the parameters
* from the database entry for this recurrence
* setting
*/
private function handle_month_recurrence($parameters)
{
$the_interval = $parameters['the_interval'];
$profile_id = $parameters['profile_id'];
$date_scheduled = $parameters['date_scheduled'];
$rules_string = $parameters['rules_string'];
$specific_time = $this->specific_time($parameters['specific_time']);
// The monthly rules string is colon delimited with a max of 3 items
$tmp = explode(':', $rules_string);
// The type of monthly recursion will be 'day' or 'gen'
$type = $tmp[0];
// This is either the day of the month, or a relative day of the week
$day = $tmp[1];
/**
* Take the date the scan was scheduled, and only return the
* year and month because my calculations are based off of the 0th
* day of the month at midnight. Using 0th day because of how
* strtotime determines it's offset
*/
$month_time = strtotime($date_scheduled);
$month_time = strftime("%Y-%m-00 00:00:00", $month_time);
/**
* Get X months in the future from the last date scheduled
* Because the remaining date calculations will be based
* off of that future time.
*/
$time = strtotime("+{$the_interval} month", strtotime($month_time));
/**
* Turn the future date into PEAR object so I can use
* the PEAR object's methods.
*/
$future_date = new Date($time);
$future_month = $future_date->getMonth();
$future_year = $future_date->getYear();
switch ($type) {
case "gen":
// Get the weekday that was specified
$weekday = $this->get_weekday_fullname($tmp[2]);
// Get the number of days in the month
$days_in_month = Date_Calc::daysInMonth($future_month, $future_year);
/**
* Turn the above into an array where the day of the
* month is the value. The last value will be the last
* day of the month
*/
for ($day = 1; $day <= $days_in_month; $day++) {
$days[] = $day;
}
$days_in_month = $days;
switch ($day) {
case "1st":
$day = $this->get_relative_day($days_in_month, $future_month, $future_year, $weekday);
$future_date->setDay($day);
break;
case "2nd":
$day = $this->get_relative_day($days_in_month, $future_month, $future_year, $weekday, 2);
$future_date->setDay($day);
break;
case "3rd":
$day = $this->get_relative_day($days_in_month, $future_month, $future_year, $weekday, 3);
$future_date->setDay($day);
break;
case "4th":
$day = $this->get_relative_day($days_in_month, $future_month, $future_year, $weekday, 4);
$future_date->setDay($day);
break;
case "last":
$days_in_month = array_reverse($days_in_month);
/**
* I reversed the array above, so in essence we're
* starting from the end of the month, therefore the
* "last" day of the month will, in this case, be
* the first match
*/
$day = $this->get_relative_day($days_in_month, $future_month, $future_year, $weekday);
$future_date->setDay($day);
break;
case "2_last":
$days_in_month = array_reverse($days_in_month);
/**
* I reversed the array above, so in essence we're
* starting from the end of the month, therefore the
* "2nd to last" day of the month will, in this case, be
* the second match
*/
$day = $this->get_relative_day($days_in_month, $future_month, $future_year, $weekday, 2);
$future_date->setDay($day);
break;
}
//.........这里部分代码省略.........
示例14: compare
compare(3, Date_Calc::dayOfWeek(22, 11, 2000), 'dayOfWeek');
compare(47, Date_Calc::weekOfYear(22, 11, 2000), 'weekOfYear');
compare(4, Date_Calc::quarterOfYear(22, 11, 2000), 'quarterOfYear');
compare(3, Date_Calc::dayOfWeek('22', '11', '2000'), 'dayOfWeek str');
compare(47, Date_Calc::weekOfYear('22', '11', '2000'), 'weekOfYear str');
compare(4, Date_Calc::quarterOfYear('22', '11', '2000'), 'quarterOfYear str');
compare(28, Date_Calc::daysInMonth(2, 1900), 'daysInMonth 1');
compare(29, Date_Calc::daysInMonth(2, 1996), 'daysInMonth 2');
compare(29, Date_Calc::daysInMonth(2, 2000), 'daysInMonth 3');
compare(28, Date_Calc::daysInMonth(2, 2001), 'daysInMonth 4');
compare(30, Date_Calc::daysInMonth(11, 2000), 'daysInMonth 5');
compare(28, Date_Calc::daysInMonth('02', 1900), 'daysInMonth 1 str');
compare(29, Date_Calc::daysInMonth('02', 1996), 'daysInMonth 2 str');
compare(29, Date_Calc::daysInMonth('02', 2000), 'daysInMonth 3 str');
compare(28, Date_Calc::daysInMonth('02', 2001), 'daysInMonth 4 str');
compare(30, Date_Calc::daysInMonth('11', '2000'), 'daysInMonth 5 str');
compare(5, Date_Calc::weeksInMonth(11, 2000), 'weeksInMonth');
compare(5, Date_Calc::weeksInMonth('11', '2000'), 'weeksInMonth str');
$exp = array('19000226', '19000227', '19000228', '19000301', '19000302', '19000303', '19000304');
compare($exp, Date_Calc::getCalendarWeek(27, 2, 1900), 'getCalendarWeek 1');
$exp = array('20000228', '20000229', '20000301', '20000302', '20000303', '20000304', '20000305');
compare($exp, Date_Calc::getCalendarWeek(28, 2, 2000), 'getCalendarWeek 2');
$exp = array('20001127', '20001128', '20001129', '20001130', '20001201', '20001202', '20001203');
compare($exp, Date_Calc::getCalendarWeek(27, 11, 2000), 'getCalendarWeek 3');
compare($exp, Date_Calc::getCalendarWeek('27', '11', '2000'), 'getCalendarWeek 3 str');
$exp = array(array('20001030', '20001031', '20001101', '20001102', '20001103', '20001104'), array('20001105', '20001106', '20001107', '20001108', '20001109', '20001110', '20001111'), array('20001112', '20001113', '20001114', '20001115', '20001116', '20001117', '20001118'), array('20001119', '20001121', '20001122', '20001123', '20001124', '20001125', '20001126'), array('20001127', '20001128', '20001129', '20001130', '20001201', '20001202', '20001203'));
compare($exp, Date_Calc::getCalendarMonth(11, 2000), 'getCalendarMonth');
compare($exp, Date_Calc::getCalendarMonth('11', '2000'), 'getCalendarMonth str');
// I don't feel like dealing with this right now...
//compare('', Date_Calc::getCalendarYear(2000), 'getCalendarYear');
compare('20001121', Date_Calc::prevDay(22, 11, 2000), 'prevDay');
示例15: nWeekDayOfMonth
/**
* Calculates the date of the Nth weekday of the month,
* such as the second Saturday of January 2000
*
* @param int $week the number of the week to get
* (1 to 5. Also can be 'last'.)
* @param int $dow the day of the week (0 = Sunday)
* @param int $month the month
* @param int $year the year. Use the complete year instead of the
* abbreviated version. E.g. use 2005, not 05.
* @param string $format the string indicating how to format the output
*
* @return string the date in the desired format
* @access public
* @static
*/
function nWeekDayOfMonth($week, $dow, $month, $year, $format = DATE_CALC_FORMAT)
{
if (is_numeric($week) && ($week < 1 || $week > 5) || !is_numeric($week) && $week != "last") {
return PEAR::raiseError("Invalid week value '{$week}', only 1-5 or 'last' accepted");
}
if ($dow < 0 || $dow > 6) {
return PEAR::raiseError("Invalid dow value '{$dow}', only 0-6 accepted");
}
if ($month < 1 || $month > 12) {
return PEAR::raiseError("Invalid month value '{$month}'");
}
if (is_numeric($week)) {
// the weekday of first day of month "1"
$DOW1 = Date_Calc::dayOfWeek(1, $month, $year);
// finds the sunday
$sunday = ($week - 1) * 7 + 1;
if ($DOW1 > 0) {
$sunday += 7 - $DOW1;
}
// adjust the sunday with dow addition
$wdate = $sunday + $dow;
if ($wdate > Date_Calc::daysInMonth($month, $year)) {
return -1;
} else {
return Date_Calc::dateFormat($wdate, $month, $year, $format);
}
} elseif ($week == 'last' && $dow < 7) {
$lastday = Date_Calc::daysInMonth($month, $year);
$lastdow = Date_Calc::dayOfWeek($lastday, $month, $year);
$diff = $dow - $lastdow;
if ($diff > 0) {
return Date_Calc::dateFormat($lastday - (7 - $diff), $month, $year, $format);
} else {
return Date_Calc::dateFormat($lastday + $diff, $month, $year, $format);
}
} else {
return -1;
}
}