Gå til innhold

Kalender skript problemer


Anbefalte innlegg

Hei. Jeg prøver å lage en enkel kalender i php som skriver ut kalenderen for nåværende måned.

Har delvis fått det til, men har noen feil. Ukedagene stemmer ikke overens med dato, og får ikke skriptet til å bryte tabell rad ved slutten av uken. Noen tips ?

[code]<?
# mktime format is : mktime($hrs,$min,$sec,$month,$day,$year)
$dates  = date('t',mktime($hrs,$min,$sec,date('m'),date('d'),date('Y'))); # Days in current month
$wd	 = array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'); # Weekday names

echo "<table border=1>"; # Html table

echo "<tr>";
foreach($wd as $w) { #Loops through weekday names
echo "<td>$w</td>";
}
echo "</tr>";

echo "<tr>";
for($i=1; $i<=$dates; $i++) { # Loops through dates
if($i==date('d')) {
 echo "<td><b>$i</b></td>";
}
elseif($i==7) { # Breaks of rows after 7 days (end of week)
 echo "</tr>";
}
else {
 echo "<td>$i</td>";  # Prints all the days in the current month
}
}
echo "</tr>";
echo "</table>";
?>[/code]

Endret av christdi
Lenke til kommentar
Videoannonse
Annonse
Gjest Slettet+142

Ukedagene stemmer ikke pga. at du startet hver måned på mandag, og å bytte tabellrad gjorde du kun etter første rad siden du sammenlignet $i med 7.

 

Dette burde fungere:

 

<?php
# mktime format is : mktime($hrs,$min,$sec,$month,$day,$year)
$dates  = date('t',mktime($hrs,$min,$sec,date('m'),date('d'),date('Y'))); # Days in current month
$wd	 = array('Mon','Tue','Wed','Thu','Fri','Sat','Sun'); # Weekday names
$dw = array_flip($wd);
$first_day = 1 + $dw[date('D', mktime($hrs,$min,$sec,date('m'),1,date('Y')))];
$idag = date('j');
$i = 1;

echo "<table border=1>"; # Html table

echo "<tr>";
foreach($wd as $w) { #Loops through weekday names
echo "<th>$w</th>";
}
echo "</tr>\n";

for($day=1; $day<=$dates; ++$i) {

if( in_array($i, array(1, 8, 15, 22, 29, 36)) ) echo "<tr>";

if( $i < $first_day ) echo "<td> </td>";
else {
	echo "<td>".($day==$idag ? "<b>{$day}</b>" : $day) . "</td>";
	++$day;
}

if( in_array($i, array(7, 14, 21, 28, 35)) ) echo "</tr>\n";

}




echo "</table>";
?>

Lenke til kommentar
<?php

echo "<table border=\"1\">\n";
echo "<tr>";

foreach(array("Mon", "Tue", "Wed", "Thu", "Fri", "Sat", "Sun") as $weekday) {
echo "<th>$weekday</th>";
}

echo "</tr>\n";

for($day = $cell = 1; $day <= date("t"); $cell++) {

if($cell < date("N", mktime(0, 0, 0, date("m"), 1, date("Y")))) echo "<td></td>";

else {
	echo "<td>".($day == date("j") ? "<b>$day</b>" : $day) . "</td>";
	if($day == date("t")){ echo "</tr>\n"; break; }
	$day++;
}

if(round($cell/7) == $cell/7) echo "</tr>\n<tr>";

}

echo "</table>";

?>

Lenke til kommentar

<?php
function getDaysInWeeksOfMonth($month = null, $year = null) {
if ($year == null) {
	$year = date('Y');
}
if ($month == null) {
	$month = date('n');
}
$time = mktime(0, 0, 0, $month, 1, $year);
$days = range(1, date('t', $time));

if (1 < $dayOfWeek = date('N', $time)) {
	$emptyAtStart = array_fill(0, --$dayOfWeek, ' ');
$days = array_merge($emptyAtStart, $days);
}
if ($daysTooFew = (count($days) % 7)) {
	$emptyAtEnd = array_fill(0, 7 - $daysTooFew, ' ');
$days = array_merge($days, $emptyAtEnd);
}
return array_chunk($days, 7);
}
print_r(getDaysInWeeksOfMonth(8));
?>

 

Should be easy enough to print.

* Skal være enkel nok å skrive ut. ;)

 

Med ukenummer

<pre><?php
function getDaysInWeeksOfMonth($month = null, $year = null) {
if ($year == null) {
	$year = date('Y');
}
if ($month == null) {
	$month = date('n');
}
$time = mktime(0, 0, 0, $month, 1, $year);
$daysOfMonth = date('t', $time);
$days = range(1, date('t', $time));

if (1 < $dayOfWeek = date('N', $time)) {
	$emptyAtStart = array_fill(0, --$dayOfWeek, ' ');
$days = array_merge($emptyAtStart, $days);
}
if ($daysTooFew = (count($days) % 7)) {
	$emptyAtEnd = array_fill(0, 7 - $daysTooFew, ' ');
$days = array_merge($days, $emptyAtEnd);
}
$week = date('W', $time);
$daysInWeeks = array_chunk($days, 7);
if (in_array($week, array(52, 53))) {
	$firstWeek = $week;
$week = 0;
}

$toWeek = $week + count($daysInWeeks) - 1;
$weeks = range($week, $toWeek);

if ($weeks[0] == 0) {
	$weeks[0] = $firstWeek;
}
$lastWeek = (int) date('W', mktime(0, 0, 0, $month, $daysOfMonth, $year));
if ($lastWeek != $toWeek) {
	array_pop($weeks);
$weeks[] = $lastWeek;
}
return array_combine($weeks, $daysInWeeks);
}
print_r(getDaysInWeeksOfMonth());
?></pre>

Endret av OISNOT
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...