Autor Zpráva
Scrash6
Profil *
Dobrý den, potřeboval bych poradit s jednoduchým kalendářem.
Nechápu, proč kalendář funguje pouze od ledna 1902 až do ledna 2038, když mám v proměné
$_GET["month"]
větší číslo jak 1 v roce 1902 a 2038, kalendář se zasekne a nepokračuje v zobrazování dnů.
Neví někdo co v tom vězí ?

// odkazy na konkretni dny
$selected_days[2009][2][24] = true;
$selected_days[2009][2][27] = true;
$selected_days[2009][3][5]  = true;
$selected_days[2009][3][17] = true;
$selected_days[2009][4][20] = true;

// prvotni inicializace, nastavime aktualni cas,  mesic a rok
$date = time();
$day = date('d', $date);
$month = date('m', $date);
$year = date('Y', $date);

$d = (int) date("d");
$m = (int) date("m");
$y = (int) date("Y");

echo "Dnes má svátek <strong>".$svatek[$d][$m]."</strong>";

// pokud v GETu existuje mesic ci rok, tak "aktualni" mesic a rok je ten z URL
if ($_GET["year"]) $year = (int) $_GET["year"];
if ($_GET["month"]) $month = (int) $_GET["month"];

// pro dalsi zobrazeni potrebujeme prvni den v mesici, pocet dni v mesici ...
$first_day = mktime(0,0,0,$month, 1, $year);
$title = date('n', $first_day);
$day_of_week = date('D', $first_day);
$days_in_month = date('t', $first_day);


// ceske mesice
$cz_months = array(
                    1 => "Leden",
                         "Únor",
                         "Březen",
                         "Duben",
                         "Květen",
                         "Červen",
                         "Červenec",
                         "Srpen",
                         "Září",
                         "Říjen",
                         "Listopad",
                         "Prosinec"
                );

$prevY = $nextY = $year;
$prevM = $nextM = $month;

// nastaveni odkazu pro predchozi a nasledujici mesic / rok
if ($month - 1 < 1) { $prevM = 12; $prevY--;} else {$prevM = $month - 1;};
if ($month + 1 > 12){ $nextM = 1; $nextY++;} else {$nextM = $month + 1;};

$prev = "<a class='url' href='?month=".($prevM)."&amp;year=".($prevY)."'><img src='".IMAGES."prew.png' alt='Předchozí' border='0'></a>";
$next = "<a class='url' href='?month=".($nextM)."&amp;year=".($nextY)."'><img src='".IMAGES."next.png' alt='Další' border='0'></a>";

// timto si vyplnime v kalendari prazdne bunky, 1 den v mesici a prvniho neni vzdy pondeli ...
$emptyTD = array("Mon" => 0, "Tue" => 1, "Wed" => 2, "Thu" => 3, "Fri" => 4, "Sat" => 5, "Sun" => 6);
$blank = $emptyTD[$day_of_week];

// vykresleni kalendare
echo "\n<table align='center' class='calendar'>\n";
echo "<tr><td class='url-bg'>".$prev."</td><th colspan='5'> ".$cz_months[$title]." $year</th><td class='url-bg'>$next</td></tr>\n";
echo "<tr>\n<td class='days-name'>Pondělí</td>\n<td class='days-name'>Úterý</td>\n<td class='days-name'>Středa</td>\n<td class='days-name'>Čtvrtek</td>\n<td class='days-name'>Pátek</td>\n<td class='days-name'>Sobota</td>\n<td class='days-name'>Neděle</td>\n</tr>";

$day_count = 1;

echo "<tr>";

// zde prave zjistime pocet prazdnych bunek pred 1 dnem v mesici
while ( $blank > 0 ){
  echo "<td class='old-days'></td>";
  $blank--;
  $day_count++;

}

$day_num = 1;

// veskere dny v kalendari
while ($day_num <= $days_in_month){
    if (!isset($selected_days[$year][$month][$day_num])){
        if($day_num == $d AND $_GET["month"] == $m AND $_GET["year"] == $y){
            echo "<td class='today'>".$day_num."<br>\n<span class='svatek'>".$svatek[$day_num][$_GET["month"]]."</span></td>";

        }else{
            echo "<td class='days'>".$day_num."<br>\n<span class='svatky'>".$svatek[$day_num][$_GET["month"]]."</span></td>";
        }
    }

  $day_num++;
  $day_count++;

  if ($day_count > 7){
    echo "</tr>\n<tr>";
    $day_count = 1;
  }
}


// timto zajistime spravne zobrazeni kalendare a dopocitani prazdnych bunek
while ($day_count >1 && $day_count <=7){
  echo "<td></td>";
  $day_count++;
}

echo "</tr>\n</table>\n\n";
jenikkozak
Profil
Scrash6:
Nechápu, proč kalendář funguje pouze od ledna 1902 až do ledna 2038
Jde o omezení funkce date().
Určitě potřebujete větší rozsah kalendáře?
Scrash_
Profil *
Aha, větší rozsah nepotřebuji, jen mě zajímalo v čem byl problém.
Díky za odpověď.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0