PHP календарь: переместить столбец воскресенья до конца - PullRequest
0 голосов
/ 03 октября 2010

Это скрипт календаря, который я получил из онлайн-урока.Он работает нормально, но я хочу переместить столбец воскресенья до конца (после столбца субботы):

<?php
if (!isset($_REQUEST["month"])) $_REQUEST["month"] = date("n");
if (!isset($_REQUEST["year"]))  $_REQUEST["year"]  = date("Y");

$month_current = $_REQUEST["month"];
$year_current  = $_REQUEST["year"];

$prev_year = $year_current;
$next_year = $year_current;

$month_previous = $month_current-1;
$month_next = $month_current+1;

if ($month_previous == 0 ) 
{
 $month_previous = 12;
 $prev_year = $year_current - 1;
}

if ($month_next == 13 ) 
{
 $month_next = 1;
 $next_year = $year_current + 1;
}

$timestamp = mktime(0,0,0,$month_current,1,$year_current);
$lastdate    = date("t",$timestamp);

$thismonth = getdate ($timestamp);
$firstday  = $thismonth['wday'];
?>

<?php 
for ($i=0; $i<($lastdate + $firstday); $i++) 
{

 if(($i % 7) == 0 ) echo "<tr>\n";

 if($i < $firstday) echo "<td></td>\n";

 else echo "<td align='center' valign='middle' height='20px'>". ($i - $firstday + 1) . "</td>\n";

 if(($i % 7) == 6 ) echo "</tr>\n";

}
?>

Я попытался изменить код на это:

<?php 
for ($i=0; $i<($lastdate + $firstday); $i++) 
{

 if(($i % 7) == 1 ) echo "<tr>\n";

 # if $i less than the first day (1), don't print the value of $i
 if($i < $firstday) echo "<td></td>\n";

 # print the value of $i
 else echo "<td align='center' valign='middle' height='20px'>". ($i - $firstday + 1) . "</td>\n";

 if(($i % 7) == 0 ) echo "</tr>\n";

}
?>

Затем он не отображается должным образом в столбце, когда первый день начинается с воскресенья.Например: http://ec -ener.eu / dump / index.php? Month = 8 & year = 2010

Как это исправить?В качестве альтернативы, как я могу изменить исходный скрипт, чтобы я мог переместить воскресенье в конец столбцов?

ps Я также только что обнаружил, что в исходном коде, похоже, есть небольшая проблема / ошибка, если вы проверитеhtml - tr и td - он генерирует,

<tr>
<td align='center' valign='middle' height='20px'>30</td>
<td align='center' valign='middle' height='20px'>31</td>


                              </table>
            </td>
        </tr>

у него есть таблица закрытия в и есть только закрытие, но нет открытия.Я считаю, что оригинальный простой простой цикл генерирует некоторые недействительные HTML!я могу это исправить ??спасибо!

Ответы [ 2 ]

3 голосов
/ 03 октября 2010

Я думаю, вам нужно изменить значение переменной первого дня для первого дня

$firstday  = $thismonth['wday']; //from here
//adding
$firstday = ($firstday + 6) % 7; //shifting the 1st day
0 голосов
/ 03 октября 2010

В вашем измененном скрипте есть две проблемы:

Цикл начинается с $ i = 0, но не генерирует тег <tr> до $ i = 1. Таким образом, первый столбец не находится влюбой тег <tr>.

Кроме того, if($i < $firstday) должно быть истинным шесть раз, чтобы сгенерировать шесть пустых тегов <td></td> для перемещения даты в правый столбец.

Чтобы исправить это, начните цикл с 1, а когда воскресенье - первый день, установите $firstday = 7

<?php 
if($firstday == 0 ) $firstday = 7;
for ($i=1; $i<($lastdate + $firstday); $i++) 
{

  if(($i % 7) == 1 ) echo "<tr>\n";

  # if $i less than the first day (1), don't print the value of $i
  if($i < $firstday) echo "<td></td>\n";

  # print the value of $i
  else echo "<td align='center' valign='middle' height='20px'>". ($i - $firstday + 1) . "</td>\n";

  if(($i % 7) == 0 ) echo "</tr>\n";

}
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...