Avatar billede muddyw. Praktikant
11. marts 2006 - 11:39 Der er 11 kommentarer og
2 løsninger

enkel PHP kalender

Jeg vil lave en enkel PHP kalender på mit site, men kan ikke finde en guide.
Er der nogen der har en god guide/tutorial til hvordan jeg laver en DANSK kalender i PHP ala denne her:

http://www.isbjoernen.dk/
jaja jeg ved godt den er ASP....
Avatar billede udvikler Nybegynder
11. marts 2006 - 11:49 #1
Kig i mit gamle spørgsmål: http://www.eksperten.dk/spm/681692

her er koden som virker:

<table>
<tr>
<td>M</td>
<td>T</td>
<td>O</td>
<td>T</td>
<td>F</td>
<td>L</td>
<td>S</td>
</tr>
<?php

echo "<tr>";

for ($dag=1;$dag<=date("t");$dag++)
{
    echo "<td>";
    echo date("d",mktime(0,0,0,1,$dag,2006));
    echo "</td>";
   
    if (($dag%7) == 1)
    {
        echo "</tr><tr>";
    }
}

echo "</tr>";

?>
</table>
Avatar billede coderdk Praktikant
11. marts 2006 - 14:41 #2
<?php

    setlocale( LC_TIME, 'danish' );

    $today = time();
    if ( !empty( $_GET['m'] ) && !empty( $_GET['y'] ) && is_numeric( $_GET['m'] ) && is_numeric( $_GET['y'] ) )
    {
        $today = mktime( 0, 0, 0, $_GET['m'], 1, $_GET['y'] );
    }
    $mname = ucfirst( strftime( '%B', $today ) );
    $thism = date( 'm', $today );
    $thisy = date( 'Y', $today );
    $startd = mktime( 0, 0, 0, $thism, 1, $thisy );
    $endd = mktime( 23, 59, 59, $thism + 1, 0, $thisy );
    $nodays = date( 'd', $endd );
    $startwd = strftime( '%u', $startd );
    $endwd = strftime( '%u', $endd );
    $startpad = ( $startwd == 1 ? 0 : $startwd - 1 );
    $endpad = ( $endwd == 7 ? 0 : 7 - $endwd );

?><table>
    <tr>
        <td><a href="<?= $_SERVER['PHP_SELF'] ?>?m=<?= date( 'm', strtotime( '-1 month', $today ) ) ?>&amp;y=<?= date( 'y', strtotime( '-1 month', $today ) ) ?>">&lt;&lt;</a></td>
        <td align="center" colspan="5">
            <?= $mname ?>
        </td>
        <td><a href="<?= $_SERVER['PHP_SELF'] ?>?m=<?= date( 'm', strtotime( '+1 month', $today ) ) ?>&amp;y=<?= date( 'y', strtotime( '+1 month', $today ) ) ?>">&gt;&gt;</a></td>
    </tr>
    <tr>
        <td>Ma</td>
        <td>Ti</td>
        <td>On</td>
        <td>To</td>
        <td>Fr</td>
        <td>Lø</td>
        <td>Sø</td>
    </tr>
<?php

    echo "<tr>";

    $n = 0;
    if ( $startpad > 0 )
    {
        for ( $i = 0; $i < $startpad; $i++ )
        {
            echo "<td>&nbsp;</td>";
            $n++;
        }
    }
   
    for ( $dag = 1; $dag <= date( 't' ); $dag++ )
    {
        $n %= 7;
        if ( $n == 0 )
        {
            echo "</tr>\n<tr>";
        }
        $n++;

        echo "<td>";
        echo date("d",mktime(0,0,0,$thism,$dag,$thisy));
        echo "</td>";
    }

    if ( $endpad > 0 )
    {
        for ( $i = 1; $i < $endpad; $i++ )
        {
            echo "<td>&nbsp;</td>";
        }
    }

    echo "</tr>\n";

?>
</table>
Avatar billede mjl Nybegynder
11. marts 2006 - 15:39 #3
[coderdk] : Den viser 1. marts som mandag ???
Avatar billede mjl Nybegynder
11. marts 2006 - 15:42 #4
[aco] : Din virker vidst heller ikke ... ?
Avatar billede coderdk Praktikant
11. marts 2006 - 20:05 #5
Øøøh? Hos mig viser den 1. marts 2006 som en onsdag!
Avatar billede coderdk Praktikant
11. marts 2006 - 20:07 #6
Check lige at året er korrekt på din server, her er en modificeret udgave:

<?php

    setlocale( LC_TIME, 'danish' );

    $today = time();
    if ( !empty( $_GET['m'] ) && !empty( $_GET['y'] ) && is_numeric( $_GET['m'] ) && is_numeric( $_GET['y'] ) )
    {
        $today = mktime( 0, 0, 0, $_GET['m'], 1, $_GET['y'] );
    }
    $mname = substr( ucfirst( strftime( '%B', $today ) ), 0, 3 );
    $thism = date( 'm', $today );
    $thisy = date( 'Y', $today );
    $startd = mktime( 0, 0, 0, $thism, 1, $thisy );
    $endd = mktime( 23, 59, 59, $thism + 1, 0, $thisy );
    $nodays = date( 'd', $endd );
    $startwd = strftime( '%u', $startd );
    $endwd = strftime( '%u', $endd );
    $startpad = ( $startwd == 1 ? 0 : $startwd - 1 );
    $endpad = ( $endwd == 7 ? 0 : 7 - $endwd );

?><table>
    <tr>
        <td><a href="<?= $_SERVER['PHP_SELF'] ?>?m=<?= date( 'm', strtotime( '-1 month', $today ) ) ?>&amp;y=<?= date( 'y', strtotime( '-1 month', $today ) ) ?>">&lt;&lt;</a></td>
        <td align="center" colspan="5">
            <?= $mname . "., " . $thisy ?>
        </td>
        <td><a href="<?= $_SERVER['PHP_SELF'] ?>?m=<?= date( 'm', strtotime( '+1 month', $today ) ) ?>&amp;y=<?= date( 'y', strtotime( '+1 month', $today ) ) ?>">&gt;&gt;</a></td>
    </tr>
    <tr>
        <td>Ma</td>
        <td>Ti</td>
        <td>On</td>
        <td>To</td>
        <td>Fr</td>
        <td>Lø</td>
        <td>Sø</td>
    </tr>
<?php

    echo "<tr>";

    $n = 0;
    if ( $startpad > 0 )
    {
        for ( $i = 0; $i < $startpad; $i++ )
        {
            echo "<td>&nbsp;</td>";
            $n++;
        }
    }
 
    for ( $dag = 1; $dag <= date( 't' ); $dag++ )
    {
        $n %= 7;
        if ( $n == 0 )
        {
            echo "</tr>\n<tr>";
        }
        $n++;

        echo "<td>";
        echo date("d",mktime(0,0,0,$thism,$dag,$thisy));
        echo "</td>";
    }

    if ( $endpad > 0 )
    {
        for ( $i = 1; $i < $endpad; $i++ )
        {
            echo "<td>&nbsp;</td>";
        }
    }

    echo "</tr>\n";

?>
</table>
Avatar billede coderdk Praktikant
11. marts 2006 - 20:10 #7
Se her at den virker ;) http://example.coder.dk/simplecal.php
Avatar billede mjl Nybegynder
11. marts 2006 - 20:22 #8
Ja - ok ... !

På min kværn duer det dog ikke ... ! Øv .... :)
Avatar billede coderdk Praktikant
11. marts 2006 - 20:23 #9
Der var faktisk en lille fejl, den er rettet :)
Avatar billede coderdk Praktikant
11. marts 2006 - 20:24 #10
Prøv lige denne:

<?php

    setlocale( LC_TIME, 'danish' );

    $today = time();
    if ( !empty( $_GET['m'] ) && !empty( $_GET['y'] ) && is_numeric( $_GET['m'] ) && is_numeric( $_GET['y'] ) )
    {
        $today = mktime( 0, 0, 0, $_GET['m'], 1, $_GET['y'] );
    }
    $mname = substr( ucfirst( strftime( '%B', $today ) ), 0, 3 );
    $thism = date( 'm', $today );
    $thisy = date( 'Y', $today );
    $startd = mktime( 0, 0, 0, $thism, 1, $thisy );
    $endd = mktime( 23, 59, 59, $thism + 1, 0, $thisy );
    $nodays = date( 'd', $endd );
    $startwd = strftime( '%u', $startd );
    $endwd = strftime( '%u', $endd );
    $startpad = ( $startwd == 1 ? 0 : $startwd - 1 );

?>
<style>
    .vbo { border-left: 1px solid black; }
    .bb { border-bottom: 1px solid black; }
    .sat { background-color: #eeffee; }
    .sun { background-color: #ffeeee; }
    .dis { background-color: #eee; }
</style>
<table>
    <tr>
        <td><a href="<?= $_SERVER['PHP_SELF'] ?>?m=<?= date( 'm', strtotime( '-1 month', $today ) ) ?>&amp;y=<?= date( 'y', strtotime( '-1 month', $today ) ) ?>">&lt;&lt;</a></td>
        <td align="center" colspan="5">
            <?= $mname . "., " . $thisy ?>
        </td>
        <td><a href="<?= $_SERVER['PHP_SELF'] ?>?m=<?= date( 'm', strtotime( '+1 month', $today ) ) ?>&amp;y=<?= date( 'y', strtotime( '+1 month', $today ) ) ?>">&gt;&gt;</a></td>
    </tr>
    <tr>
        <td class="bb">Ma</td>
        <td class="vbo bb">Ti</td>
        <td class="vbo bb">On</td>
        <td class="vbo bb">To</td>
        <td class="vbo bb">Fr</td>
        <td class="vbo bb">Lø</td>
        <td class="vbo bb">Sø</td>
    </tr>
<?php

    echo "<tr>";

    $n = 0;
    if ( $startpad > 0 )
    {
        for ( $i = 0; $i < $startpad; $i++ )
        {
            $cl = "bb dis";
            if ( $i != 0 ) $cl .= " vbo";
            echo "<td class=\"$cl\">&nbsp;</td>";
            $n++;
        }
    }
 
    for ( $dag = 1; $dag <= date( 't', $today ); $dag++ )
    {
        $n %= 7;
        $cl = "vbo bb";
        if ( $n == 0 )
        {
            echo "</tr>\n<tr>";
            $cl = "bb";
        }
        if ( $n == 5 )
        {
            $cl .=  " sat";       
        }
        elseif ( $n == 6 )
        {
            $cl .=  " sun";       
        }
        $n++;

        echo "<td class=\"$cl\">";
        echo date("d",mktime(0,0,0,$thism,$dag,$thisy));
        echo "</td>";
    }

    if ( $endwd != 7 )
    {
        for ( $i = $endwd; $i < 7; $i++ )
        {
            echo "<td class=\"vbo bb dis\">&nbsp;</td>";
        }
    }

    echo "</tr>\n</table>\n";
   
?>
Avatar billede coderdk Praktikant
11. marts 2006 - 20:26 #11
Prøv lige efter den første if at skrive: echo date("d/m-Y H:i:s", $today);
Avatar billede gf Nybegynder
12. marts 2006 - 22:32 #12
Hej

Denne minder meget om coderdk's. Jeg skal lige sige, at jeg ikke er forfatter til dette script.

<?php
/* Kalenderscriptet*/
/* Tjekker året er sat i adresselinien, ellers bliver det i år */
$aar = (empty($_GET['y'])) ? date(Y) : $_GET['y'];
/* Tjekker måneden er sat i adresselinien, ellers bliver den sat til aktuel måned */
$maaned = (empty($_GET['m'])) ? date('m') : $_GET['m'];
/* Array med ugedage */
$uger = array('Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør', 'Søn');
/* Den aktuelle dato i unix epoch (antal sekunder siden 1. jan 1970) */
$dato = mktime(0,0,0,$maaned, 1, $aar);
/* Antal dage i måneden */
$antalDageMaaned = date('t', $dato);
/* Første ugedag (hvis det er søndag (0) sættes den til 7) */
$foersteUgedag = (date('w', $dato) == 0) ? 7 : date('w', $dato);
/* Udskriver måned og år */
print ('<h2>'.date('F', $dato).' - '.$aar.'</h2>');
/* Udskriver forrige/næste knap */
printf('<a href="'.$_SERVER['PHP_SELF'].'?m=%s&y=%s">Forrige</a> - <a href="'.$_SERVER['PHP_SELF'].'?m=%s&y=%s">Næste</a>', date('m', strtotime("-1 month", $dato)), date('Y', strtotime("-1 month", $dato)), date('m', strtotime("+1 month", $dato)), date('Y', strtotime("+1 month", $dato))); 
/* Tabellen starter */
print ('<table border="1"><tr>');
/* En række med ugedage udskrives */
for ($i = 1; $i < count($uger); $i++) {
  print ('<td>'.$uger[$i].'</td>');
}
print ('</tr>');
/* Løkken kører så længe der er dage tilbage i måneden */
for ($dag = 1; $dag <= $antalDageMaaned; $dag++) {
  print ('<tr>');
  /* Ugedage-løkken køres igennem */
  for ($u = 1; $u <= 7; $u++) {
 
    /* Udskriver tomme pladser hvis måneden ikke starter med en mandag */
    if ($u < $foersteUgedag && $foersteUgedag+$dag <= 8) {
    print ('<td></td>');
    } else {
      /* Datoen udskrives, hvis den er inde for måneden, ellers kommer der bare en tom celle url links overfoeres*/
      print ( ($dag <= $antalDageMaaned)
              ? "<td><a href='test.php?aar=$aar&maaned=$maaned&dato=$dag'>$dag</a></td>"
              : '<td></td>' );
      /* Hvis ugedagen ikke er søndag ligges der en til. (ellers tæller den to om søndagen) */
      if ($u != 7) $dag++;
    }
  }
  print ('</tr>');
}
print ('</table>');
?> 

mvh gf
Avatar billede muddyw. Praktikant
06. juni 2006 - 22:10 #13
mange tak for hjælpen
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester