| version 1.3, 2002/03/31 20:56:32 |
version 1.4, 2002/05/29 19:40:05 |
|
|
| */ |
*/ |
| class Date_Week_Magic |
class Date_Week_Magic |
| { |
{ |
| |
/** |
| |
* Validate date |
| |
* |
| |
* Validate passed date. |
| |
* |
| |
* @access public |
| |
* @param int $year year (allowed forms: YYYY, YY) |
| |
* @param int $month month (from 1 to 12) |
| |
* @param int $day day (from 1 to 31) |
| |
* @return bool true if is valid date, false otherwise |
| |
*/ |
| |
function validate($year, $month, $day) |
| |
{ |
| |
$timeNowInSeconds = mktime(0, 0, 0, $month, $day, $year); |
| |
$timeNow = localtime($timeNowInSeconds, 1 /* associative */); |
| |
|
| |
if ((($timeNow['tm_year'] >= 100 && $timeNow['tm_year'] - 100 == $year) |
| |
|| ($timeNow['tm_year'] < 100 && $timeNow['tm_year'] == $year) |
| |
|| (1900 + $timeNow['tm_year'] == $year)) |
| |
&& $timeNow['tm_mon'] + 1 == $month |
| |
&& $timeNow['tm_mday'] == $day) |
| |
{ |
| |
return true; |
| |
} |
| |
|
| |
return false; |
| |
} |
| |
|
| /** |
/** |
| * Get week information for date |
* Get week information for date |
| Line 71 class Date_Week_Magic |
|
| Line 98 class Date_Week_Magic |
|
| */ |
*/ |
| function week($year, $month, $day) |
function week($year, $month, $day) |
| { |
{ |
| $timeNowInSeconds = mktime(0, 0, 0, $month, $day, $year); |
if (Date_Week_Magic::validate($year, $month, $day) == false) { |
| $timeNow = localtime($timeNowInSeconds, 1 /* associative */); |
|
| |
|
| if ((($timeNow['tm_year'] >= 100 && $timeNow['tm_year'] - 100 == $year) |
|
| || ($timeNow['tm_year'] < 100 && $timeNow['tm_year'] == $year) |
|
| || (1900 + $timeNow['tm_year'] == $year)) |
|
| && $timeNow['tm_mon'] + 1 == $month |
|
| && $timeNow['tm_mday'] == $day) |
|
| ; // do nothing, date is valid |
|
| else |
|
| return false; |
return false; |
| |
} |
| |
|
| |
$timeNow = localtime(mktime(0, 0, 0, $month, $day, $year), |
| |
1 /* associative */); |
| |
|
| // Function localtime() 'tm_yday' 0 based, we need it 1 based. |
// Function localtime() 'tm_yday' 0 based, we need it 1 based. |
| $YearDay_I = $timeNow['tm_yday'] + 1; |
$YearDay_I = $timeNow['tm_yday'] + 1; |
| $yearNow = $timeNow['tm_year']; |
$yearNow = $timeNow['tm_year']; |
| |
|
| // American weeks begin on Sundays. ISO doesn't. |
// American weeks begin on Sundays. ISO doesn't. |
| $WeekDay_I = $timeNow['tm_wday']; |
$WeekDay_I = $timeNow['tm_wday']; |
| if (0 == $WeekDay_I) // if it's Sunday |
if (0 == $WeekDay_I) { // if it's Sunday |
| $WeekDay_I = 7; // make it Sunday |
$WeekDay_I = 7; // make it Sunday |
| |
} |
| |
|
| $WeekNo_I = intval($YearDay_I / 7); |
$WeekNo_I = intval($YearDay_I / 7); |
| $FirstWeek_I = $YearDay_I % 7; |
$FirstWeek_I = $YearDay_I % 7; |
| Line 102 class Date_Week_Magic |
|
| Line 125 class Date_Week_Magic |
|
| $FirstWeek_I += 7; |
$FirstWeek_I += 7; |
| } |
} |
| |
|
| if ($FirstWeek_I > (-4)) |
if ($FirstWeek_I > (-4)) { |
| $WeekNo_I += 1; |
$WeekNo_I += 1; |
| |
} |
| |
|
| if ($FirstWeek_I > 3) |
if ($FirstWeek_I > 3) { |
| $WeekNo_I += 1; |
$WeekNo_I += 1; |
| |
} |
| |
|
| if (0 == $WeekNo_I) { |
if ($WeekNo_I == 0) { |
| // Same as previous year's last day. |
// Same as previous year's last day. |
| |
|
| $ar = Date_Week_Magic::week($year - 1, 12 /* December is 12 */, 31); |
$ar = Date_Week_Magic::week($year - 1, 12 /* December is 12 */, 31); |
| Line 146 class Date_Week_Magic |
|
| Line 171 class Date_Week_Magic |
|
| { |
{ |
| $day = 15; |
$day = 15; |
| |
|
| while ($week > 53) |
while ($week > 53) { |
| $week -= 53; |
$week -= 53; |
| |
} |
| |
|
| $month = intval((11 * $week) / 53); // assume 53 weeks a year |
$month = intval((11 * $week) / 53); // assume 53 weeks a year |
| |
|
| Line 160 class Date_Week_Magic |
|
| Line 186 class Date_Week_Magic |
|
| } |
} |
| |
|
| $getweek = $ar['week']; |
$getweek = $ar['week']; |
| $getday = $ar['weekday']; |
$getday = $ar['weekday']; |
| |
|
| if (($getweek > $week - 3) && ($getweek < $week + 3)) { |
if (($getweek > $week - 3) && ($getweek < $week + 3)) { |
| if (($getweek == $week) && ($getday == 1)) { |
if (($getweek == $week) && ($getday == 1)) { |
| break; |
break; |
| } |
} |
| else { |
else { |
| if ($day == 1 && $month == 0) |
if ($day == 1 && $month == 0) { |
| return false; |
return false; |
| |
} |
| |
|
| if ($getweek < $week) { |
if ($getweek < $week) { |
| if ($week - $getweek > 1) { |
if ($week - $getweek > 1) { |