Page 1 of 1
Working with a calendar
Posted: Thu Jul 22, 2004 5:48 am
by dave_c00
Bech100 | Please use Code: Select all
tags when posting code. Read: [url=http://forums.devnetwork.net/viewtopic.php?t=21171]Posting Code in the Forums[/url][/color]
Hello,
I currently have the code below that displays a calendar for a given month and year. I would like, however, to display the next 14 days from todays date so whnever the user clicks the current month or the next month they can see that two weeks from todays date is bold.
I have tried various functions but keep getting errors
Code: Select all
<?php
define("ADAY", (60*60*24));
if (!checkdate($month,1,$year)){
$nowArray = getdate();
$Tday = $nowArray['mday'];
$month = $nowArray['mon'];
$year = $nowArray['year'];
}
$start = mktime(12,0,0,$month,1,$year);
$firstDayArray = getdate($start);
?>
<html>
<head>
<title><?php print "Calendar: ".$firstDayArray['month']
." ".$firstDayArray['year']?></title>
</head>
<body>
<form method="post">
<select name="month">
<?php
$months = Array("January","February","March","April",
"May","June","July","August","September",
"October","November","December");
for ($x=1;$x <=count($months);$x++){
print "\t<option value="$x"";
print ($x == $month)?" SELECTED":"";
print ">".$months[$x-1]."\n";
}
?>
</select>
<select name="year">
<?php
for ($x=1980;$x<2010;$x++){
print "\t<option";
print ($x == $year)?" SELECTED":"";
print ">$x\n";
}
?>
</select>
<input type="submit" value="Go!">
</form>
<p>
<?php
$days = Array("Sunday", "Monday", "Tuesday", "Wednesday",
"Thursday", "Friday", "Saturday");
print "<TABLE BORDER=1 CELLPADDING=0>\n";
foreach ($days as $day)
print "\t<td><b>$day</b></td>\n";
for ($count=0;$count<(6*7);$count++){
$dayArray = getdate($start);
if ((($count)%7)==0){
if($dayArray['mon']!=$month)
break;
print "</tr><tr>\n";
}
if ($count<$firstDayArray['wday']||$dayArray['mon']!=$month)
print "\t<td><br></td>\n";
else{
print "\t<td>".$dayArray['mday']." ".$dayArray['month']."</td>\n";
$start += ADAY;
}
}
print "</tr></table>";
?>
Thanks in advance
Dave.
Bech100 | Please use Code: Select all
tags when posting code. Read: [url=http://forums.devnetwork.net/viewtopic.php?t=21171]Posting Code in the Forums[/url][/color]
Posted: Thu Jul 22, 2004 9:03 am
by liljester
it would be tough to do that unless you check the currently selected days timestamp with the timestamp of all the days as they are printed... let me see if i can dig up the calander i wrote, and you can look at it.
Posted: Thu Jul 22, 2004 9:09 am
by liljester
i found it and added in some comments, mabe you can use it =)
Code: Select all
<?php // FILENAME: calander.php
if(!empty($_GET)){extract($_GET);}elseif(!empty($HTTP_GET_VARS)){extract($HTTP_GET_VARS);}
if(!empty($_POST)){extract($_POST);}elseif(!empty($HTTP_POST_VARS)){extract($HTTP_POST_VARS);}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<link rel="stylesheet" type="text/css" href="calander.css">
<title>calander</title>
</head>
<body>
<table cellpadding="2" cellspacing="5" width="100%">
<?php
$current_day = 1;
if(!$this_month){
$this_month = date("n");
$this_year = date("Y");
$start_timestamp = mktime(0, 0, 0, $this_month, 1, $this_year);
} else {
$start_timestamp = mktime(0, 0, 0, $this_month, 1, $this_year);
}
if(($this_month + 1) == 13) { $next_month = 1; $next_year = $this_year + 1; }
else { $next_month = $this_month + 1; $next_year = $this_year; }
if(($this_month - 1) == 0) { $prev_month = 12; $prev_year = $this_year - 1; }
else { $prev_month = $this_month - 1; $prev_year = $this_year; }
$days_this_month = date("t", $start_timestamp);
?>
<tr>
<td width="100%" valign="top" style="padding: 0px;">
<!-- CALANDER -->
<table class="text_normal" border="1" cellpadding="2" cellspacing="0" style="border-collapse: collapse" bordercolor="#0033CC" width="100%" id="AutoNumber1">
<tr>
<td class="sub_title" width="100%" colspan="7"><a href="calander.php?this_month=<?php print $prev_month; ?>&this_year=<?php print $prev_year; ?>"><font color="#FFFFFF"><<</font></a> <?php print date("F, Y", $start_timestamp); ?> <a href="calander.php?this_month=<?php print $next_month; ?>&this_year=<?php print $next_year; ?>"><font color="#FFFFFF">>></font></a></td>
</tr>
<tr bgcolor="#CCCCCC">
<td width="14%" valign="top" align="center">Sun</td>
<td width="14%" valign="top" align="center">Mon</td>
<td width="14%" valign="top" align="center">Tue</td>
<td width="14%" valign="top" align="center">Wed</td>
<td width="14%" valign="top" align="center">Thur</td>
<td width="15%" valign="top" align="center">Fri</td>
<td width="15%" valign="top" align="center">Sat</td>
</tr><form action="calander.php?this_month=<?php print $this_month; ?>&this_year=<?php print $this_year; ?>" method="POST">
<?php
$weekday_start = date("w", $start_timestamp);
for($h = 0; $h < 5; $h++){
print"\t\t\t\t<tr>\n";
for($i = 0; $i < 7; $i++){
if($weekday_start == $i) { $start_calander = 1; }
if($current_day > $days_this_month) { $start_calander = 0; }
if($start_calander == 1){
// Get timestamp for today day, and for the current day that is printing. //
$current_timestamp = mktime(0, 0, 0, $this_month, $current_day, $this_year);
$now_timestamp = mktime(0, 0, 0, date("n"), date("j"), date("Y"));
// Check to see if currently printing day is what im looking for. //
if($current_timestamp == $now_timestamp) { $bgcolor="bgcolor="#CCCCCC" "; }
elseif(($current_timestamp <= $now_timestamp + 604800) && ($current_timestamp >= $now_timestamp - 604800)) { $bgcolor="bgcolor="#DDDDDD" "; }
else { $bgcolor = ""; }
print"\t\t\t\t\t<td $bgcolor width="14%" height="75" valign="top">$current_day<br>\n";
print"</td>\n";
$current_day++;
} else {
print"\t\t\t\t\t<td width="14%" height="75" valign="top"> </td>\n";
}
}
print"\t\t\t\t</tr>\n";
}
?>
</form></table>
<!-- END CALANDER -->
</td>
</tr>
<tr>
<td class="sub_title" width="100%" align="right">
<!-- FOOTER -->
<?php print date("M d, Y"); ?>
<!-- END FOOTER -->
</td>
</tr>
</table>
</body>
</html>
and here is the CSS for it (filename: calander.css)
Code: Select all
<style>
a { text-decoration: none; color: #0033CC;}
a:link { text-decoration: none; color: #0033CC;}
a:visited { text-decoration: none; color: #0033CC;}
a:hover { text-decoration: underline; color: #0033CC;}
a:active { text-decoration: none; color: #0033CC; }
body
{
background-image: url('images/bg_01.png');
background-repeat: no-repeat;
background-position: center top;
}
.menu
{
border:1px solid #0033CC;
background-image: url('images/title_01.gif');
background-repeat: no-repeat;
background-position: left top;
font:12px Arial;
font-weight: Bold;
color: #0033CC;
}
.sub_title
{
border: 1px solid #0033CC;
background-color: #0033CC;
font: 12px Arial;
font-weight: Bold;
color: #FFFFFF;
}
.text_bold_border
{
border: 1px solid #0033CC;
font:12px Arial;
font-weight: Bold;
color: #0033CC;
}
.text_normal_border
{
border: 1px #0033CC solid;
font:12px Arial;
font-weight: Normal;
color: #0033CC;
}
.text_normal
{
font:12px Arial;
font-weight: Normal;
color: #0033CC;
}
.news_header
{
font:18px Arial;
font-weight: Bold;
color: #0033CC;
}
.news_date
{
font:10px Arial;
font-weight: Bold;
color: #0033CC;
}
.input_button
{
border: 1px #0033CC solid;
background-color: #FFFFFF;
font:12px Arial;
font-weight: bold;
color: #0033CC;
width: 100px;
}
</style>
Posted: Fri Jul 23, 2004 3:46 am
by dave_c00
That looks really good. Thanks...