2012-06-01 4 views
0
июля

Вот моя проблема все месяцы начиная с 1 дня но месяц 7 2012 начало от 2 дня не знаю, почемуPHP: скрипт календаря не работает хорошо в

и вот код

<table> 
<?php 
$cMonth = 7; 
$cYear = 2012; 

$first_day_timestamp = mktime(0,0,0,$cMonth,1,$cYear); 
$maxday    = date("t",$first_day_timestamp); 
$thismonth   = getdate($first_day_timestamp); 
$startday   = $thismonth['wday'] - 1; 

for ($i=0; $i<($maxday+$startday); $i++) { 

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

    if ($i < $startday) { echo "<td>&nbsp;</td>" ; continue; } 

    $current_day = $i - $startday + 1; 

    echo "<td>". $current_day . "</td>"; 

    if (($i % 7) == 6) echo "</tr>"; 
} 
?> 
</table> 

изображение прилагается

Calendar

PLE ase скажите мне, почему это произошло

+0

Вы уверены, что этого не происходит в другие месяцы? Похоже на это. – Tremmors

+0

Да, это случается через несколько месяцев не все monthes вы можете попробовать код на своем localhost он отлично работает в течение многих месяцев –

ответ

1

Почему вы это делаете:

$startday   = $thismonth['wday'] - 1; 

??

Вы перемещаете день назад назад. Это фактически говорит, что день, который вы хотите начать рассчитывать, - это один день до первого дня месяца.

--EDIT-- Итак, вы делаете это, потому что хотите, чтобы календарь начинался в понедельник вместо воскресенья. WDAY PHP является this:

0 (воскресенье) до 6 (в субботу)

Вы вычитая одно из него не сдвинет начало месяца до одного дня до и если месяц начинается в воскресенье. Тогда $ startday равен -1, и это сбрасывает ваш счет. Вам нужно, чтобы он обернулся вокруг предыдущей недели. Если вы добавите еще одну строку, которая исправляет этот случай, например:

$startday = thismonth['wday'] - 1; 
if($startday < 0) $startday = 6; 

Он должен исправить эту проблему. Я уверен, что есть другие способы компенсировать, что понедельник стал первым днем ​​недели.

+0

Это связано с тем, что начало календаря с понедельника , когда я удалил -1, он начинается с 1 ок, но не день vaild в компьютерном календаре –

+0

См. Мое редактирование.Вы должны обернуться, чтобы начать в предыдущую субботу в течение нескольких месяцев, начиная с воскресенья, потому что php рассматривает воскресение в первый день недели. – Tremmors

+0

Да эта работа отлично :) спасибо –

2

Изменение $startday = $thismonth['wday'] - 1; до $startday = $thismonth['wday']; отображает правильный календарь с воскресеньем в первый день недели.

Проблема с вашим кодом заключается в том, что $ startday равен -1 ($ thismonth ['wday'] равен 0, так как месяц начинается в воскресенье). На первой итерации цикла $current_day = 0 - (-1) + 1 = 2 так начинается с 2, что верно, потому что понедельник - 2-й месяц.

У вас будет эта проблема в любой месяц, который начинается в воскресенье. Попробуйте сентября 2013

+0

Да, это произошло и в sep 2012, но когда я подделал этот код '$ startday = $ thismonth [' wday '] - 1; 'to' $ startday = $ thismonth [' wday ']; 'этот эффект в другие месяцы –

+0

Как он влияет на другие месяцы? Кажется, это отлично работает для меня. Если вы хотите запустить его в понедельник, вы можете установить startDay на 6 (воскресенье), если он меньше 0 внутри цикла. – sachleen

Смежные вопросы