Auteur Topic: PHP jaar kalender met week nummers  (gelezen 3781 keer)

0 leden en 1 gast bekijken dit topic.

xvilo

  • Global Moderator
  • Verslaafd DigitalPlace Lid
  • *****
  • Berichten: 2675
  • Karma: -44
    • Bekijk profiel
    • http://www.xvilo.com
PHP jaar kalender met week nummers
« Gepost op: maart 15, 2016, 11:23:54 pm »
  • [+1]0
  • [-1]0
  • Hallo,

    Ik ben op dit moment bezig met een jaar kalender. Nu heb ik die goed (danku internet). Maar ik krijg de week nummers er niet in in...
    Mijn code:
    <?php
    $months=array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
    $current_month=date('n');
    $current_year=date('Y');;
    $year=date('Y');
    $current_day=date('d');
    $month=0;?>
    <div class="calendar row">
    <div class="col-xs-12"><?php echo $current_year ?></div>
    <?php for ($row=1; $row<=3; $row++) {
    for ($column=1; $column<=4; $column++) {
    echo '<div class="month col-xs-12 col-sm-9 col-md-4 col-lg-4">';

    $month++;

    $first_day_in_month=date('w',mktime(0,0,0,$month,1,$current_year));
    $month_days=date('t',mktime(0,0,0,$month,1,$current_year));

    // in PHP, Sunday is the first day in the week with number zero (0)
    // to make our calendar works we will change this to (7)
    if ($first_day_in_month==0){
    $first_day_in_month=7;
    }
    echo '<table>';
    echo '<th colspan="7">'.$months[$month-1].'</th>';
    echo '<tr class="days"><td>Mo</td><td>Tu</td><td>We</td><td>Th</td><td>Fr</td>';
    echo '<td class="sat">Sa</td><td class="sun">Su</td></tr>';
    echo '<tr>';
    for($i=1; $i<$first_day_in_month; $i++) {
    echo '<td> </td>';
    }
    for($day=1; $day<=$month_days; $day++) {
    $pos=($day+$first_day_in_month-1)%7;
    $class = (($day==$current_day) && ($month==$current_month) && ($current_year==$year)) ? 'today' : 'day';
    $class .= ($pos==6) ? ' sat' : '';
    $class .= ($pos==0) ? ' sun' : '';

    echo '<td class="'.$class.'">'.$day.'</td>';
    if ($pos==0) echo '</tr><tr>';
    }
    echo '</tr>';
    echo '</table>';
    echo '</div>';
    }
    }?>
    </div>
    output:
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">

    <html>
    <head>
        <title></title>
    </head>

    <body>
        <div class="calendar row">
            <div class="col-xs-12">
                2016
            </div>

            <div class="month col-xs-12 col-sm-9 col-md-4 col-lg-4">
                <table>
                    <tbody>
                        <tr>
                            <th colspan="7">January</th>
                        </tr>

                        <tr class="days">
                            <td>Mo</td>

                            <td>Tu</td>

                            <td>We</td>

                            <td>Th</td>

                            <td>Fr</td>

                            <td class="sat">Sa</td>

                            <td class="sun">Su</td>
                        </tr>

                        <tr>
                            <td></td>

                            <td></td>

                            <td></td>

                            <td></td>

                            <td class="day">1</td>

                            <td class="day sat">2</td>

                            <td class="day sun">3</td>
                        </tr>

                        <tr>
                            <td class="day">4</td>

                            <td class="day">5</td>

                            <td class="day">6</td>

                            <td class="day">7</td>

                            <td class="day">8</td>

                            <td class="day sat">9</td>

                            <td class="day sun">10</td>
                        </tr>

                        <tr>
                            <td class="day">11</td>

                            <td class="day">12</td>

                            <td class="day">13</td>

                            <td class="day">14</td>

                            <td class="day">15</td>

                            <td class="day sat">16</td>

                            <td class="day sun">17</td>
                        </tr>

                        <tr>
                            <td class="day">18</td>

                            <td class="day">19</td>

                            <td class="day">20</td>

                            <td class="day">21</td>

                            <td class="day">22</td>

                            <td class="day sat">23</td>

                            <td class="day sun">24</td>
                        </tr>

                        <tr>
                            <td class="day">25</td>

                            <td class="day">26</td>

                            <td class="day">27</td>

                            <td class="day">28</td>

                            <td class="day">29</td>

                            <td class="day sat">30</td>

                            <td class="day sun">31</td>
                        </tr>

                        <tr>
                            <td></td>
                        </tr>
                    </tbody>
                </table>
            </div>

    <!-- etc etc etc voor elke maand -->

            <div class="month col-xs-12 col-sm-9 col-md-4 col-lg-4">
                <table>
                    <tbody>
                        <tr>
                            <th colspan="7">December</th>
                        </tr>

                        <tr class="days">
                            <td>Mo</td>

                            <td>Tu</td>

                            <td>We</td>

                            <td>Th</td>

                            <td>Fr</td>

                            <td class="sat">Sa</td>

                            <td class="sun">Su</td>
                        </tr>

                        <tr>
                            <td></td>

                            <td></td>

                            <td></td>

                            <td class="day">1</td>

                            <td class="day">2</td>

                            <td class="day sat">3</td>

                            <td class="day sun">4</td>
                        </tr>

                        <tr>
                            <td class="day">5</td>

                            <td class="day">6</td>

                            <td class="day">7</td>

                            <td class="day">8</td>

                            <td class="day">9</td>

                            <td class="day sat">10</td>

                            <td class="day sun">11</td>
                        </tr>

                        <tr>
                            <td class="day">12</td>

                            <td class="day">13</td>

                            <td class="day">14</td>

                            <td class="day">15</td>

                            <td class="day">16</td>

                            <td class="day sat">17</td>

                            <td class="day sun">18</td>
                        </tr>

                        <tr>
                            <td class="day">19</td>

                            <td class="day">20</td>

                            <td class="day">21</td>

                            <td class="day">22</td>

                            <td class="day">23</td>

                            <td class="day sat">24</td>

                            <td class="day sun">25</td>
                        </tr>

                        <tr>
                            <td class="day">26</td>

                            <td class="day">27</td>

                            <td class="day">28</td>

                            <td class="day">29</td>

                            <td class="day">30</td>

                            <td class="day sat">31</td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </body>
    </html>

    Gewenste output mét weeknummers wat ik niet voor elkaar krijg:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">

    <html>
    <head>
        <title></title>
    </head>

    <body>
        <div class="calendar row">
            <div class="col-xs-12">
                2016
            </div>

            <div class="month col-xs-12 col-sm-9 col-md-4 col-lg-4">
                <table>
                    <tbody>
                        <tr>
                            <th colspan="7">January</th>
                        </tr>

                        <tr class="days">
                        <td>&nbsp;</td>
                       
                            <td>Mo</td>

                            <td>Tu</td>

                            <td>We</td>

                            <td>Th</td>

                            <td>Fr</td>

                            <td class="sat">Sa</td>

                            <td class="sun">Su</td>
                        </tr>

                        <tr>
                        <td class="week">52</td>

                            <td></td>

                            <td></td>

                            <td></td>

                            <td></td>

                            <td class="day">1</td>

                            <td class="day sat">2</td>

                            <td class="day sun">3</td>
                        </tr>

                        <tr>
                        <td class="week">1</td>

                            <td class="day">4</td>

                            <td class="day">5</td>

                            <td class="day">6</td>

                            <td class="day">7</td>

                            <td class="day">8</td>

                            <td class="day sat">9</td>

                            <td class="day sun">10</td>
                        </tr>

                        <tr>
                        <td class="week">2</td>

                            <td class="day">11</td>

                            <td class="day">12</td>

                            <td class="day">13</td>

                            <td class="day">14</td>

                            <td class="day">15</td>

                            <td class="day sat">16</td>

                            <td class="day sun">17</td>
                        </tr>

                        <tr>
                        <td class="week">3</td>

                            <td class="day">18</td>

                            <td class="day">19</td>

                            <td class="day">20</td>

                            <td class="day">21</td>

                            <td class="day">22</td>

                            <td class="day sat">23</td>

                            <td class="day sun">24</td>
                        </tr>

                        <tr>
                        <td class="week">4</td>

                            <td class="day">25</td>

                            <td class="day">26</td>

                            <td class="day">27</td>

                            <td class="day">28</td>

                            <td class="day">29</td>

                            <td class="day sat">30</td>

                            <td class="day sun">31</td>
                        </tr>

                        <tr>
                            <td></td>
                        </tr>
                    </tbody>
                </table>
            </div>

    <!-- etc etc etc voor elke maand -->

            <div class="month col-xs-12 col-sm-9 col-md-4 col-lg-4">
                <table>
                    <tbody>
                        <tr>
                            <th colspan="7">December</th>
                        </tr>

                        <tr class="days">
                            <td>Mo</td>

                            <td>Tu</td>

                            <td>We</td>

                            <td>Th</td>

                            <td>Fr</td>

                            <td class="sat">Sa</td>

                            <td class="sun">Su</td>
                        </tr>

                        <tr>
                        <td class="week">48</td>

                            <td></td>

                            <td></td>

                            <td></td>

                            <td class="day">1</td>

                            <td class="day">2</td>

                            <td class="day sat">3</td>

                            <td class="day sun">4</td>
                        </tr>

                        <tr>
                        <td class="week">49</td>

                            <td class="day">5</td>

                            <td class="day">6</td>

                            <td class="day">7</td>

                            <td class="day">8</td>

                            <td class="day">9</td>

                            <td class="day sat">10</td>

                            <td class="day sun">11</td>
                        </tr>

                        <tr>
                        <td class="week">50</td>

                            <td class="day">12</td>

                            <td class="day">13</td>

                            <td class="day">14</td>

                            <td class="day">15</td>

                            <td class="day">16</td>

                            <td class="day sat">17</td>

                            <td class="day sun">18</td>
                        </tr>

                        <tr>
                        <td class="week">51</td>

                            <td class="day">19</td>

                            <td class="day">20</td>

                            <td class="day">21</td>

                            <td class="day">22</td>

                            <td class="day">23</td>

                            <td class="day sat">24</td>

                            <td class="day sun">25</td>
                        </tr>

                        <tr>
                        <td class="week">52</td>

                            <td class="day">26</td>

                            <td class="day">27</td>

                            <td class="day">28</td>

                            <td class="day">29</td>

                            <td class="day">30</td>

                            <td class="day sat">31</td>
                        </tr>
                    </tbody>
                </table>
            </div>
        </div>
    </body>
    </html>

    Ik hoop dat iemand mij hierbij wil helpen, ik heb me er al de hele avond over gebogen en weet het niet meer  :hmmm:

    //xvilo


    gertmenkel

    • Actief DigitalPlace Lid
    • **
    • Berichten: 1125
    • Karma: 131
      • Bekijk profiel
    Re: PHP jaar kalender met week nummers
    « Reactie #1 Gepost op: maart 16, 2016, 12:40:53 pm »
  • [+1]0
  • [-1]0
  • De date functie kan het weeknummer bepalen. Om dat te doen met je eerst een timestamp van je datum maken. Vervolgens kun je die formatteren als weeknummer.

    Bijvoorbeeld:
    function weekNumber($year, $month, $day)
    {
        $timestamp = mktime(0,0,0, $month, $day, $year);
        return date("W", $timestamp);
    }
    Dan hoef je alleen maar voor iedere week een keer die functie aan te roepen en presto  :-)
    ThePirateBay AFK
    Bekijk de vrije en gratis documentaire!

    xvilo

    • Global Moderator
    • Verslaafd DigitalPlace Lid
    • *****
    • Berichten: 2675
    • Karma: -44
      • Bekijk profiel
      • http://www.xvilo.com
    Re: PHP jaar kalender met week nummers
    « Reactie #2 Gepost op: maart 16, 2016, 05:20:58 pm »
  • [+1]0
  • [-1]0
  • Dankje @gertmenkel, maar als ik jou code toepas gaat het toch niet helemaal lekker:


    Ik doe het dan op deze manier:
    echo '<table>';
    echo '<th colspan="7">'.$months[$month-1].'</th>';
    echo '<tr class="days"><td>&nbsp;</td><td>Mo</td><td>Tu</td><td>We</td><td>Th</td><td>Fr</td>';
    echo '<td class="sat">Sa</td><td class="sun">Su</td></tr>';
    echo '<tr>';
    echo '<td class="week">'.weekNumber($year, $month, $day).'</td>';
    for($i=1; $i<$first_day_in_month; $i++) {
    echo '<td> </td>';
    }
    for($day=1; $day<=$month_days; $day++) {
    $pos=($day+$first_day_in_month-1)%7;
    $class = (($day==$current_day) && ($month==$current_month) && ($current_year==$year)) ? 'today' : 'day';
    $class .= ($pos==6) ? ' sat' : '';
    $class .= ($pos==0) ? ' sun' : '';

    echo '<td class="'.$class.'">'.$day.'</td>';
    if ($pos==0) echo '</tr><tr><td class="week">'.weekNumber($year, $month, $day).'</td>';
    }
    echo '</tr>';
    echo '</table>';

    De functie word hier dan 2x aangeroepen in de tabel...


    gertmenkel

    • Actief DigitalPlace Lid
    • **
    • Berichten: 1125
    • Karma: 131
      • Bekijk profiel
    Re: PHP jaar kalender met week nummers
    « Reactie #3 Gepost op: maart 20, 2016, 02:26:49 pm »
  • [+1]0
  • [-1]0
  • Dit zou moeten werken:
    <?php
    function weekNumber($year, $month, $day)
    {
        $timestamp = mktime(0,0,0, $month, $day, $year);
        return date("W", $timestamp);
    }


        $months=array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December');
        $current_month=date('n');
        $current_year=date('Y');;
        $year=date('Y');

        if (isset($_GET['year']))
            $year = $_GET['year'];

        $current_day=date('d');
        $month=0;?>
                <div class="calendar row">
                    <div class="col-xs-12"><?php echo $year ?></div>
                    <?php for ($row=1; $row<=3; $row++) {
                        for ($column=1; $column<=4; $column++) {
                            echo '<div class="month col-xs-12 col-sm-9 col-md-4 col-lg-4">';

                            $month++;

                            $first_day_in_month=date('w',mktime(0,0,0,$month,1,$year));
                            $month_days=date('t',mktime(0,0,0,$month,1,$year));

                            // in PHP, Sunday is the first day in the week with number zero (0)
                            // to make our calendar works we will change this to (7)
                            if ($first_day_in_month==0){
                                $first_day_in_month=7;
                            }

                            echo '<table>';
                            echo '<th colspan="7">'.$months[$month-1].'</th>';
                            echo '<tr class="days"><td>&nbsp;</td><td>Mo</td><td>Tu</td><td>We</td><td>Th</td><td>Fr</td>';
                            echo '<td class="sat">Sa</td><td class="sun">Su</td></tr>';
                            echo '<tr>';

                            // Eerste week van de maand is een speciaal geval, maar daar kunnen we gewoon de 1e van de dag invullen
                            $weeknum = weekNumber($year, $month, 1);
                            echo '<td class="week">'. $weeknum ."($year-$month-1)" .'</td>';
                            for($i=1; $i<$first_day_in_month; $i++) {
                                echo '<td> </td>';
                            }
                            $day = 0;
                            for($day=1; $day<=$month_days; $day++) {
                                $pos=($day+$first_day_in_month-1)%7;
                                $class = (($day==$current_day) && ($month==$current_month) && ($current_year==$year)) ? 'today' : 'day';
                                $class .= ($pos==6) ? ' sat' : '';
                                $class .= ($pos==0) ? ' sun' : '';

                                echo '<td class="'.$class.'">'.$day.'</td>';

                                // Je stelt hier het weeknummer in van de volgende week
                                // Echter staat $day nog op de laatste datum van de huidige week
                                // Je moet dus 1 bij de dag optellen
                                if ($pos==0)
                                {
                                    echo '</tr>';

                                    // Als de volgende week begint met de 1e van de maand wordt er een onnodige rij ingevoegd
                                    // Daarom extra check erover!
                                    $last_day_of_month = $month_days;
                                    if ($day < $last_day_of_month){
                                        $weeknum = weekNumber($year, $month, 1+$day);
                                        echo '<tr><td class="week">'.$weeknum."($year-$month-" . (1+$day). ")" .'</td>';
                                    }
                                }
                            }
                            echo '</tr>';
                            echo '</table>';


                            echo '</div>';
                        }
                    }?>
    ThePirateBay AFK
    Bekijk de vrije en gratis documentaire!