New file |
0,0 → 1,148 |
<?php |
/* vim: set expandtab tabstop=4 shiftwidth=4: */ |
// |
// +----------------------------------------------------------------------+ |
// | PHP Version 4 | |
// +----------------------------------------------------------------------+ |
// | Copyright (c) 1997-2002 The PHP Group | |
// +----------------------------------------------------------------------+ |
// | This source file is subject to version 2.02 of the PHP license, | |
// | that is bundled with this package in the file LICENSE, and is | |
// | available at through the world-wide-web at | |
// | http://www.php.net/license/3_0.txt. | |
// | If you did not receive a copy of the PHP license and are unable to | |
// | obtain it through the world-wide-web, please send a note to | |
// | license@php.net so we can mail you a copy immediately. | |
// +----------------------------------------------------------------------+ |
// | Authors: Harry Fuecks <hfuecks@phppatterns.com> | |
// | Lorenzo Alberton <l dot alberton at quipo dot it> | |
// +----------------------------------------------------------------------+ |
// |
// $Id: Weekday.php,v 1.3 2004/08/16 12:25:15 hfuecks Exp $ |
// |
/** |
* @package Calendar |
* @version $Id: Weekday.php,v 1.3 2004/08/16 12:25:15 hfuecks Exp $ |
*/ |
|
/** |
* Allows Calendar include path to be redefined |
* @ignore |
*/ |
if (!defined('CALENDAR_ROOT')) { |
define('CALENDAR_ROOT', 'Calendar'.DIRECTORY_SEPARATOR); |
} |
|
/** |
* Load Calendar decorator base class |
*/ |
require_once CALENDAR_ROOT.'Decorator.php'; |
|
/** |
* Load a Calendar_Day |
*/ |
require_once CALENDAR_ROOT.'Day.php'; |
/** |
* Decorator for fetching the day of the week |
* <code> |
* $Day = new Calendar_Day(2003, 10, 23); |
* $Weekday = & new Calendar_Decorator_Weekday($Day); |
* $Weekday->setFirstDay(0); // Set first day of week to Sunday (default Mon) |
* echo $Weekday->thisWeekDay(); // Displays 5 - fifth day of week relative to Sun |
* </code> |
* @package Calendar |
* @access public |
*/ |
class Calendar_Decorator_Weekday extends Calendar_Decorator |
{ |
/** |
* First day of week |
* @var int (default = 1 for Monday) |
* @access private |
*/ |
var $firstDay = 1; |
|
/** |
* Constructs Calendar_Decorator_Weekday |
* @param object subclass of Calendar |
* @access public |
*/ |
function Calendar_Decorator_Weekday(& $Calendar) |
{ |
parent::Calendar_Decorator($Calendar); |
} |
|
/** |
* Sets the first day of the week (0 = Sunday, 1 = Monday (default) etc) |
* @param int first day of week |
* @return void |
* @access public |
*/ |
function setFirstDay($firstDay) { |
$this->firstDay = (int)$firstDay; |
} |
|
/** |
* Returns the previous weekday |
* @param string (default = 'int') return value format |
* @return int numeric day of week or timestamp |
* @access public |
*/ |
function prevWeekDay($format = 'int') |
{ |
$ts = $this->calendar->prevDay('timestamp'); |
$Day = new Calendar_Day(2000,1,1); |
$Day->setTimeStamp($ts); |
$day = $this->calendar->cE->getDayOfWeek($Day->thisYear(),$Day->thisMonth(),$Day->thisDay()); |
$day = $this->adjustWeekScale($day); |
return $this->returnValue('Day', $format, $ts, $day); |
} |
|
/** |
* Returns the current weekday |
* @param string (default = 'int') return value format |
* @return int numeric day of week or timestamp |
* @access public |
*/ |
function thisWeekDay($format = 'int') |
{ |
$ts = $this->calendar->thisDay('timestamp'); |
$day = $this->calendar->cE->getDayOfWeek($this->calendar->year,$this->calendar->month,$this->calendar->day); |
$day = $this->adjustWeekScale($day); |
return $this->returnValue('Day', $format, $ts, $day); |
} |
|
/** |
* Returns the next weekday |
* @param string (default = 'int') return value format |
* @return int numeric day of week or timestamp |
* @access public |
*/ |
function nextWeekDay($format = 'int') |
{ |
$ts = $this->calendar->nextDay('timestamp'); |
$Day = new Calendar_Day(2000,1,1); |
$Day->setTimeStamp($ts); |
$day = $this->calendar->cE->getDayOfWeek($Day->thisYear(),$Day->thisMonth(),$Day->thisDay()); |
$day = $this->adjustWeekScale($day); |
return $this->returnValue('Day', $format, $ts, $day); |
} |
|
/** |
* Adjusts the day of the week relative to the first day of the week |
* @param int day of week calendar from Calendar_Engine |
* @return int day of week adjusted to first day |
* @access private |
*/ |
function adjustWeekScale($dayOfWeek) { |
$dayOfWeek = $dayOfWeek - $this->firstDay; |
if ( $dayOfWeek >= 0 ) { |
return $dayOfWeek; |
} else { |
return $this->calendar->cE->getDaysInWeek( |
$this->calendar->year,$this->calendar->month,$this->calendar->day |
) + $dayOfWeek; |
} |
} |
} |
?> |