Version: 0.1
Type: Function
Category: Calendars/Dates
License: GNU General Public License
Description: A function to generate the first and last date of a fiscal month given a month (1-12) and year.
<?php
/*
Author: Eron Howard, Novacoast Inc.
Date: 1/14/2003
Fiscal calculator function. Input month (1-12) and year (4 digit), returns start and end date of fiscal month.
This logic has been tested by Novacoast, however, we encourage you to test the logic yourself and take no
responsibility for results.
This is open source code. I hope it saves you time. Give us feedback at www.novacoast.com
*/
function fiscals( $month, $year )
{
$month = $month - 0;
$months[1] = 31;
$months[2] = 28;
$months[3] = 31;
$months[4] = 30;
$months[5] = 31;
$months[6] = 30;
$months[7] = 31;
$months[8] = 31;
$months[9] = 30;
$months[10] = 31;
$months[11] = 30;
$months[12] = 31;
$startyear = $year;
if( $month == 1 || $month == 2 )
{
$startyear =$year-1;
}
$unixYearStart = mktime (5, 0, 0, 3, 1, $startyear );
$monthstart[3] = getDate( $unixYearStart );
if( $monthstart[3]["weekday"] == "Saturday" ) $addDays = 7;
if( $monthstart[3]["weekday"] == "Sunday" ) $addDays = 6;
if( $monthstart[3]["weekday"] == "Monday" ) $addDays = 5;
if( $monthstart[3]["weekday"] == "Tuesday" ) $addDays = 4;
if( $monthstart[3]["weekday"] == "Wednsday" ) $addDays = 3;
if( $monthstart[3]["weekday"] == "Thursday" ) $addDays = 2;
if( $monthstart[3]["weekday"] == "Friday" ) $addDays = 1;
$currentday = 1+ $addDays; //1st week
$currentmonth = 3;
for( $i=0; $i<20; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[3] = getDate( $unixNextWeek );
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
//echo "HERE: ".$currentmonth." ".$currentday."<BR>";
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[4] = getDate( $unixNextWeek );
for( $i=0; $i<28; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[4] = getDate( $unixNextWeek );
//echo "HERE: ".$currentmonth." ".$currentday."<BR>";
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
// echo "HERE: ".$currentmonth." ".$currentday."<BR>";
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[5] = getDate( $unixNextWeek );
for( $i=0; $i<35; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[5] = getDate( $unixNextWeek );
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[6] = getDate( $unixNextWeek );
for( $i=0; $i<28; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[6] = getDate( $unixNextWeek );
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[7] = getDate( $unixNextWeek );
for( $i=0; $i<28; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[7] = getDate( $unixNextWeek );
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[8] = getDate( $unixNextWeek );
for( $i=0; $i<35; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[8] = getDate( $unixNextWeek );
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[9] = getDate( $unixNextWeek );
for( $i=0; $i<28; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[9] = getDate( $unixNextWeek );
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[10] = getDate( $unixNextWeek );
for( $i=0; $i<28; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[10] = getDate( $unixNextWeek );
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[11] = getDate( $unixNextWeek );
for( $i=0; $i<35; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[11] = getDate( $unixNextWeek );
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[12] = getDate( $unixNextWeek );
for( $i=0; $i<28; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[12] = getDate( $unixNextWeek );
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[1] = getDate( $unixNextWeek );
for( $i=0; $i<28; $i++ )
{
if( $currentday > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
}
if( $month == 1 || $month == 2 )
$startyear = $year;
else
$startyear = $year+1;
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthend[1] = getDate( $unixNextWeek );
if( $currentday+1 > $months[$currentmonth] )
{
$currentday = 1;
if( $currentmonth == 12 ) $currentmonth =1;
else $currentmonth++;
}
else $currentday++;
$unixNextWeek = mktime( 5, 0, 0, $currentmonth, $currentday, $startyear );
$monthstart[2] = getDate( $unixNextWeek );
$day = 28;
if( $startyear % 4 == 0 ) $day = 29;
$unixNextWeek = mktime( 5, 0, 0, 2, $day, $startyear );
$monthend[2] = getDate( $unixNextWeek );
$fiscal[0] = $monthstart[$month];
$fiscal[1] = $monthend[$month];
return $fiscal;
// echo $monthstart[$month]["month"]." ".$monthstart[$month]["mday"]." ".$monthstart[$month]["weekday"]." ".$monthstart[$month]["year"];
// echo "<BR>";
// echo $monthend[$month]["month"]." ".$monthend[$month]["mday"]." ".$monthend[$month]["weekday"]." ".$monthend[$month]["year"];
// echo "<BR><BR>";
}
?>