PX : code

Future Date Maker by Scott MacLeod
Download this code


<?

/* This class will create a date in the future based on two possible
inputs. An integer or the word 'cushion'. It was originally created to
create a future date for tentative shipping dates that would fluctuate between
3 days to 5-6 weeks in the future, the latter being the longest period of
time depending on the how busy our cushion department was. 

Sample usages:

// Create a date 7 days into the future
$future = new make_future_date;
$future->makedate('7');
echo $future[date];
// Outputs a date format like 11/12/1999

// Create a date 60 days into the future
$future = new make_future_date;
$future->makedate('60');
echo $future[date];
// Outputs a date format like 11/12/1999

// Create a date based on the month
$future = new make_future_date;
$future->makedate('cushion');
echo $future[cushiondate];
// Outputs a date format like 11/12/2000
// If the current month was July for example,
// the script would create a date 42 days
// into the future.

View the "MONTHLY VARIABLES" section to see how this works

We use it to inform our customers how long it will take for their cushions to arrive based on the time of the year.

Example: Your cushions will arrive in approximately <? echo $future[cushiontakes]; ?> weeks, and we estimate their arrival date to be <? echo $future[cushiondate]; ?> .

The code was originally converted from javascript to Perl, and now Perl to PHP, so there may be some bugs in it. I have it set to project a date up to 1 year in advance, although you can change it to create a date farther in the future by changing the $FUTURE_COUNT_LIMIT variable to something higher than 12. 

If you modify this code and/or find some bugs in it, feel free to drop me a line
so that I can update it for others. Thanks.

Scott MacLeod: scott@westminsterteak.com

*/



class make_future_date {

function makedate($input){

        $FUTURE_COUNT_LIMIT = '12';
    $mon = date("m")-1;
    $realmonth = date("m");
    $mday = date("d");
    $wday = date("w");
    $year = date("Y");

    $Day = array('Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday');
    $Month = array('1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12');
    $MonthDays = array('31', '28', '31', '30', '31', '30', '31', '31', '30', '31', '30', '31');

    if ($input == "cushion"){

// MONTHLY VARIABLES THAT CAN BE CONFIGURED TO PREDETERMINE A FUTURE DATE

    if ($Month[$mon] == 1){
    $cushion_takes = '2-3';
    $input_days = '21';
    }
    if ($Month[$mon] == 2){
    $cushion_takes = '2-3';
    $input_days = '21';
    }
    if ($Month[$mon] == 3){
    $cushion_takes = '2-3';
    $input_days = '21';
    }
    if ($Month[$mon] == 4){
    $cushion_takes = '3-4';
    $input_days = '28';
    }
    if ($Month[$mon] == 5){
    $cushion_takes = '4-5';
    $input_days = '35';
    }
    if ($Month[$mon] == 6){
    $cushion_takes = '5-6';
    $input_days = '42';
    }
    if ($Month[$mon] == 7){
    $cushion_takes = '5-6';
    $input_days = '42';
    }
    if ($Month[$mon] == 8){
    $cushion_takes = '5-6';
    $input_days = '42';
    }
    if ($Month[$mon] == 9){
    $cushion_takes = '3-4';
    $input_days = '28';
    }
    if ($Month[$mon] == 10){
    $cushion_takes = '2-3';
    $input_days = '21';
    }
    if ($Month[$mon] == 11){
    $cushion_takes = '2-3';
    $input_days = '21';
    }
    if ($Month[$mon] == 12){
    $cushion_takes = '2-3';
    $input_days = '21';
    }
    }
    else {
    $input_days = $input;
    }

    $AddDays = "$input_days";
    $TotalAddDays = $mday + $AddDays;


    if ($TotalAddDays <= $MonthDays[$mon]){

    $wday_count = $wday;
    for ($count=1;$count<=$AddDays;$count++){
    if ($wday_count == 6){
    $wday_count = -1;
    }
    $wday_count++;
    }
    $future[ "cushiontakes"] = "$cushion_takes";
    $future[ "date"] = "$Month[$mon]/$TotalAddDays/$year";
    $future[ "day"] = "$Day[$wday_count]";
    $future[ "cushiondate"] = "$Month[$mon]/$TotalAddDays/$year";
    $future[ "cushday"] = "$Day[$wday_count]";
    return $future;
    }
    else {

    $LookingFor = $TotalAddDays - $MonthDays[$mon];

    $longest=0;
    $TOTALMonthDays = "";
    $COUNTER = $mon;
    $LONG=0;
    while ($longest <= $FUTURE_COUNT_LIMIT){
    $TOTALMonthDays += $MonthDays[$COUNTER];
    if ($LookingFor >= $TOTALMonthDays){
    $LONG++;
    }
    if ($Month[$COUNTER] == 11){
    $COUNTER = -1;
    }
    $longest++;
    $COUNTER++;
    }

    $count=1;
    $month_count = $Month[$mon] - 1;
    $YEAR = $year;
    $wday_count = $wday;
    for ($count2=1;$count2<=$AddDays;$count2++){
    if ($wday_count == 6){
    $wday_count = -1;
    }
    $wday_count++;
    }
    $LONG2 = $LONG + 2;

    while ($count <= $LONG2){

    if ($month_count == 11){
    $month_count = 0;
    $YEAR++;
    }

    if ((($YEAR % 4)==0) && (($YEAR % 100)!=0) || (($YEAR % 400)==0)) {
    if ($Month[$month_count] == 1){
    $MonthDays[$month_count] = 29;
    }
    }

    $TotalMonthDays += $MonthDays[$month_count];

    if ($LookingFor <= $TotalMonthDays){
    if ($count != 1){
    $NewDay = $LookingFor - ($TotalMonthDays - $MonthDays[$month_count]);
    }
    if ($count == 1){
    $NewDay = $LookingFor;
    }

    $future[ "cushiontakes"] = "$cushion_takes";
    $future[ "date"] = "$Month[$month_count]/$NewDay/$YEAR";
    $future[ "day"] = "$Day[$wday_count]";
    $future[ "cushiondate"] = "$Month[$month_count]/$NewDay/$YEAR";
    $future[ "cushday"] = "$Day[$wday_count]";
    return $future;
    }

    $month_count++;
    $count++;

    } // end of while while
    } // end of else

    } // end of function

} // end of class

// Sample date 7 days into the future

$future = new make_future_date;
$future->makedate('7');
echo "Future Date 7 days into the future: $future[date]";
?>

Comments or questions?
PX is running PHP 5.2.17
Thanks to Miranda Productions for hosting and bandwidth.
Use of any code from PX is at your own risk.