Как начать неделю в понедельник?

Я работаю над веб-сайтом, который отображает календарь на 2015 год. Я использую https://www.hscripts.com/scripts/php/yearly-calendar.php. Вы можете увидеть демо на странице. На демо вы можете увидеть начало недели в понедельник. Я хочу перенести начало недели на понедельник. Кто-нибудь знает, как я могу изменить код ниже, чтобы таблица с днями начиналась с понедельника и чтобы календарь по-прежнему считался правильно.

<?php
$year = 2015;

echo "<table cellspacing=10 border=0>";
echo "<tr><td align=center colspan=3 class='topic'>$year Yearly Calendar</td></tr>";
for($ti=0;$ti<12;$ti++) {
          $month = $ti+1;
          if($ti%3==0) echo "<tr>";
            echo "<td valign='top'>";
        echo "<span class='monthnames'><b>".date( 'M', mktime(0, 0, 0, $month,1,0) )."</b></span>";
                  echo "<table border=0 class='tab'>";
                          echo "<tr class='daynames'><td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td></tr>";
                                    $timestamp = mktime(0,0,0,$month,1,$year);
                                    $maxday = date("t",$timestamp); 
                                    $thismonth = getdate ($timestamp);
                                    $startday = $thismonth['wday'];
                                    for($i=0; $i<($maxday+$startday); $i++) {
                                    if(($i % 7) == 0 ) {
                                                  echo "<tr>\n";

                                        }
                           if($i < $startday) echo "<td></td>\n";
                                           else{

                          if($i - $startday + 1 == date('d') && date( 'F', mktime(0, 0, 0, $month,1,0) ) == date('F') && $year == date('Y'))
                            echo "<td align='center' valign='middle' class='curdate'>".($i - $startday + 1)."</td>\n";      
                          else
                            echo "<td align='center' valign='middle'>".($i - $startday + 1)."</td>\n";
                                                } 
                                            if(($i % 7) == 6 ) echo "</tr>\n";
                                    }
                  echo "</table>";
            echo "</td>";
          if($ti!=0 && ($ti+1)%3==0) echo "</tr>";
}
echo "</table>";

person SemperMemento    schedule 25.11.2014    source источник
comment
взгляните на предыдущий понедельник   -  person Naruto    schedule 25.11.2014
comment
Используя Google, вы можете получить: stackoverflow.com/questions/4150435/   -  person Naruto    schedule 25.11.2014


Ответы (2)


Попробуй это:

$year = 2015;

echo '<table border="1">';
echo '<tr><th colspan="3">' . $year . ' Yearly Calendar</th></tr>';
for ($month = 1; $month <= 12; $month++) {
    if ($month - 1 % 3 === 0) echo '<tr>';
    $f = new DateTime("$year-$month-1");
    $l = new DateTime($f->format('Y-m-t'));
    echo '<td valign="top">';
    echo '<table border="1">';
    echo '<tr><th colspan="7">' . $f->format('F') . '</th></tr>';
    echo '<tr><th>M</th><th>T</th><th>W</th><th>T</th><th>F</th><th>S</th><th>S</th></tr>';
    while ($f->format('n') === $l->format('n')) {
        echo '<tr>';
        for ($N = 1; $N < $f->format('N'); $N++) {
            echo '<td></td>';
        }
        for ($N = $f->format('N'); $N <= 7; $N++) {
            if ($f->format('n') === $l->format('n')) {
                echo '<td>' . $f->format('j') . '</td>';
                $f->modify('+1 day');
            } else {
                echo '<td></td>';
            }
        }
        echo '<tr>';
    }
    echo '</table>';
    echo '</td>';
    if ($month % 3 === 0) echo '</tr>';
}
echo '</table>';

Он вернется:

введите здесь описание изображения

person Glavić    schedule 25.11.2014
comment
Это было именно то, что мне нужно. Большое тебе спасибо! - person SemperMemento; 25.11.2014

Вот, чувак, неделя начинается с понедельника, а дни правильные.

<?php
$year = 2015;

echo "<table cellspacing=10 border=0>";
echo "<tr><td align=center colspan=3 class='topic'>$year Yearly Calendar</td></tr>";
for($ti=0;$ti<12;$ti++) {
      $month = $ti+1;
      if($ti%3==0) echo "<tr>";
        echo "<td valign='top'>";
    echo "<span class='monthnames'><b>".date( 'M', mktime(0, 0, 0, $month,1,0) )."</b></span>";
              echo "<table border=0 class='tab'>";
                      echo "<tr class='daynames'><td>M</td><td>T</td><td>W</td><td>T</td>   <td>F</td><td>S</td><td>S</td></tr>";

                                $timestamp = mktime(0,0,0,$month,1,$year);
                                $maxday = date("t",$timestamp); 
                                $thismonth = getdate ($timestamp);
                                $startday = $thismonth['wday']-1;

                                for($i=0; $i<($maxday+$startday); $i++) {
                                if(($i % 7) == 0 ) {
                                              echo "<tr>\n";

                                    }


                       if($i < $startday) echo "<td></td>\n";
                                       else{



if($i - $startday + 1 == date('d') && date( 'F', mktime(0, 0, 0, $month,1,0) ) == date('F') && $year == date('Y'))
                        echo "<td align='center' valign='middle' class='curdate'>".($i - $startday + 1)."</td>\n";      
                      else
                        echo "<td align='center' valign='middle'>".($i - $startday + 1)."</td>\n";








                                            } 
                                        if(($i % 7) == 6 ) echo "</tr>\n";
                                }
              echo "</table>";
        echo "</td>";
      if($ti!=0 && ($ti+1)%3==0) echo "</tr>";
}
echo "</table>";
?>
person alphawow    schedule 25.11.2014
comment
Да это уже пробовал. Месяцы, где wday = 1, становятся равными 0 и не показывают первый день месяца. - person SemperMemento; 25.11.2014
comment
Ах да, февраль и март не работают. Я пересмотрю это снова. - person alphawow; 25.11.2014