On Wed, 2008-05-28 at 14:27 -0400, Mark Weaver wrote:
> Hi all,
> 
> I've put this off as long as possible, however I think I've reached an 
> impasse.
> 
> I've got an application that I've been writing. One of the modules for 
> this app is an event calendar. I've got the calendar to the place where 
> it displays the current month as well as previous and future months. The 
>   place I'm stuck is it will only show months in the past or the future 
> that are months in the current year.
> 
> Basically the method I'm using to move backward and forward is with Unix 
> timestamps.
> 
> 1. When the calendar first loads the "what" is checked for;
>       // passed in via $_GET
>       $what == current, prev, or next
>    a. "current" is the default
>       $now = time()
>       $prev = date('n',$now)-1
>       $next = date('n',$now)+1
>    b. Timestamp values are then stored in an array and then
>       sent to client in session cookie which is then accessed
>       upon each subsequent request to display the event calendar.
> 
> My question/boggle is why, when the calendar advances to 
> December(current year) it will display January, but of the current year. 
> The same happens in reverse.
> 
> Once I reach the end of the year either in the past or future the month 
> increases or decreases accordingly, but the year doesn't change. Since 
> the year value isn't changing the month calendar days that are displayed 
> simply repeat themselves.
> 
> I know there's something I'm missing, but I am definitely not seeing 
> what it is...
> 
> /********************** code below ************************/
> 
> $cal = new Calendar;
> $calpos = array();
>                       
> // check incoming values
> if ($what === "current"){
>       $cal->setCal(0,0,0,date('n'),1);
>       $now = time();
>       $prev = $cal->getStamp(date('n',$now)-1,1);
>       $next = $cal->getStamp(date('n',$now)+1,1);
>       $calpos['curr'] = $now;
>       $calpos['prev'] = $prev;
>       $calpos['next'] = $next;
>       $_SESSION['calendar'] = $calpos;
> }     
> elseif($what === "prev"){
>       $peek = $_SESSION['calendar'];
>       $now = $peek['prev'];
>       $cal->setCal(0,0,0,date('n',$now),1);
>       $prev = $cal->getStamp(date('n',$now)-1,1);
>       $next = $cal->getStamp(date('n',$now)+1,1);
>       $calpos['curr'] = $now;
>       $calpos['prev'] = $prev;
>       $calpos['next'] = $next;
>       $_SESSION['calendar'] = $calpos;
> }
> elseif($what === "next"){
>       $peek = $_SESSION['calendar'];
>       $now = $peek['next'];
>       $cal->setCal(0,0,0,date('n',$now),1);
>       $prev = $cal->getStamp(date('n',$now)-1,1);
>       $next = $cal->getStamp(date('n',$now)+1,1);
>       $calpos['curr'] = $now;
>       $calpos['prev'] = $prev;
>       $calpos['next'] = $next;
>       $_SESSION['calendar'] = $calpos;
> }
> 
> <================================================================>
> function setCal($h=0,$m=0,$s=0,$offset,$dayVal=1){            
>    $stamp = date('U',mktime($h,$m,$s, $offset,$dayVal,date('Y')));
                                                        ^^^^^^^^^
                                                        ^^^^^^^^^
                                                        ^^^^^^^^^
You don't want the current year. Fix this to a request year.

>    // Using the stamp the various necessary properties are set for the
>    // object
> 
> function getStamp($dateStr,$dayVal=1){
>    return date('U',mktime(0,0,0, $dateStr,$dayVal,date('Y')));
> }
                                                    ^^^^^^^^^
                                                    ^^^^^^^^^
                                                    ^^^^^^^^^
Similarly.

Cheers,
Rob.
-- 
http://www.interjinn.com
Application and Templating Framework for PHP


-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to