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