christdi Skrevet 2. juli 2008 Del Skrevet 2. juli 2008 (endret) 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 2. juli 2008 av christdi Lenke til kommentar
Gjest Slettet+142 Skrevet 2. juli 2008 Del Skrevet 2. juli 2008 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
Epower Skrevet 3. juli 2008 Del Skrevet 3. juli 2008 <?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
OISNOT Skrevet 4. juli 2008 Del Skrevet 4. juli 2008 (endret) <?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 4. juli 2008 av OISNOT Lenke til kommentar
Anbefalte innlegg
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 kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå