Autor Zpráva
mackopu
Profil
Pomocí fce fileexists() zjišťuji existenci souborů v adresáři. Tyto soubory jsou ve formátu např. 01_2010.pdf, kde 01 znamená číslo týdne a 2010 číslo roku.

Pokud soubor existuje, potřebuji vypsat na výstup datumový rozsah daného týdne ve formátu (např. v tomto případě) 04.01.2010 - 10.01.2010

Nejprve zjistím číslo týdne a roku:
list($tyden, $rok) = explode("_",  str_replace(".pdf", "", "01_2010.pdf"));


Jak dál?
Jan Tvrdík
Profil
$start = strtotime($rok . 'W' . $tyden);
$end = strtotime('+6 days', $start);

echo date('d.m.Y', $start) . ' – ' . date('d.m.Y', $end);
mackopu
Profil
Skvostné!
Děkuji mnohokrát.
mackopu
Profil
Nedá mi to a musím se podělit o celý zdroják, kvůli kterému jsem toto vlákno rozpoutal. Odstranil jsem z něj pouze ty části, které zjišťují přítomnost výše zmíněných PDF souborů.
Věřím, že se to leckomu hodí - skript v zásadě vykresluje kompletní kalendář podle zvoleného roku, který navíc ukazuje čísla týdnů - to jsem často u podobných řešení postrádal - (po najetí myší na ně se ještě zobrazí jejich datumový rozsah) a zvýrazňuje státní svátky včetně velikonočního pondělí (!) (opět info po najetí myší). Do budoucna pravděpodobně přidělám ještě zobrazování jmenin.

Jakékoliv nápady na vylepšení a optimalizaci pochopitelně vítám.
<?php
if(!isset($vybrany_rok)) {
  $vybrany_rok = Date("Y");
}

echo "<h2 style=\"margin-top:40px;\">Kalendář roku ".$vybrany_rok.":</h2>\n";

echo "<form method=\"GET\" action=\"\">\n";
echo "  <select size=\"1\" name=\"vybrany_rok\">\n";
$zac = Date("Y")-1;
$kon = $zac + 10;
for($i=$zac; $i<=$kon; $i++) {
  echo "    <option value=\"".$i."\"".($i == $vybrany_rok ? " selected" : "").">".$i."</option>\n";
}
echo "  </select>\n";
echo "  <input type=\"submit\" value=\"Vybrat\">\n";
echo "  <a href=\"index.php?action=insert_form_rozpis_ledu&vybrany_rok=".date("Y")."#dnesek\">přejít na dnešek</a>\n";
echo "</form>\n";

function VypisMesic($month, $year) { // 1, 2010
  $cz_mesic = array(
  "1" => "Leden",
  "Únor",
  "Březen",
  "Duben",
  "Květen",
  "Červen",
  "Červenec",
  "Srpen",
  "Září",
  "Říjen",
  "Listopad",
  "Prosinec"
  );
  
  $svatky[] = "1.1.".$year.": Nový rok, Den obnovy samostatného českého státu (státní svátek)";
  // velikonoční neděle
  $vel_nedele = date("d.m.Y", easter_date($year));
  list($vel_d, $vel_m, $vel_r) = explode(".", $vel_nedele);
  $vel_mk = mktime(0,0,0, $vel_m, $vel_d+1, $vel_r);
  // velikonoční pondělí
  $vel_pondeli = date("j.n.Y", $vel_mk);
  $svatky[] = $vel_pondeli.": Velikonoční pondělí (ostatní svátek)";
  $svatky[] = "1.5.".$year.": Svátek práce (ostatní svátek)";
  $svatky[] = "8.5.".$year.": Den osvobození (státní svátek)";
  $svatky[] = "5.7.".$year.": Den slovanských věrozvěstů Cyrila a Metoděje (státní svátek)";
  $svatky[] = "6.7.".$year.": Den upálení mistra Jana Husa (státní svátek)";
  $svatky[] = "28.9.".$year.": Den české státnosti (státní svátek)";
  $svatky[] = "28.10.".$year.": Den vzniku samostatného československého státu (státní svátek)";
  $svatky[] = "17.11.".$year.": Den boje za svobodu a demokracii (státní svátek)";
  $svatky[] = "24.12.".$year.": Štědrý den (ostatní svátek)";
  $svatky[] = "25.12.".$year.": První vánoční svátek (ostatní svátek)";
  $svatky[] = "26.12.".$year.": Druhý vánoční svátek (ostatní svátek)";
  
  $date = getdate(mktime(0,0,0,$month,1,$year));
  $today = getdate();
  $hours = $today['hours'];
  $mins = $today['minutes'];
  $secs = $today['seconds'];
  
  if(strlen($hours)<2) $hours="0".$hours;
  if(strlen($mins)<2) $mins="0".$mins;
  if(strlen($secs)<2) $secs="0".$secs;
  
  $days = date("t",mktime(0,0,0,$month,1,$year)); // pocet dnu v danem mesici
  
  $start = $date['wday'] == 0 ? 7 : $date['wday']; // týden začíná pondělím
  
  $name = $date['month'];
  $offset = $days + $start - 1;
  
  if($offset <= 28) $weeks=28; 
  elseif($offset > 35) $weeks = 42; 
  else $weeks = 35; 
  
  $jmeno_mesice = $cz_mesic[$month];
  
  $col = 1;
  $cur = 1;
  $radku = 1;
  
  $output = '';
  for($i=1;$i<=$weeks;$i++) { 
    if($col==1) {
    	$output .= " <tr>\n"; 
      $cislo_tydne = StrFTime("%V", mktime(0,0,0, $month, $cur, $year));
    	$start_rozsah = strtotime($year . 'W' . $cislo_tydne);
      $end_rozsah  = strtotime('+6 days', $start_rozsah);
      $rozsah = date('d.m.Y', $start_rozsah ) . ' – ' . date('d.m.Y', $end_rozsah );
      $output.="    <td align=\"center\" style='color:green; cursor:help;' title=\"".$rozsah."\"><span style='border-bottom-style:dashed; border-bottom-width:1px;'>".intval($cislo_tydne)."</span></td>\n";
  	}
    if($i <= ($days+($start-1)) && $i >= $start) {
  		if(($cur==$today[mday]) && ($name==$today[month]) && $year==$today[year]) {
        $style = "background-color:yellow;"; // dnes
        $style_2 = "color:red;font-weight:bold;";
        $zalozka = "<a name=\"dnesek\"></a>";
      } else {
        $style = "";
        $style_2 = "";
      }
      // je dnes svátek?
      for($z=0; $z<count($svatky); $z++) {
        list($datum_sv, $nazev_sv) = explode(": ", $svatky[$z]);
        if($datum_sv == $cur.".".date("n", strtotime($cur.".".$name.".".$year)).".".$year) {
          $style = "background-color:#ffcccc;cursor:help;";
          $tit = " title=\"".$nazev_sv."\"";
          break;
        } else {
          $tit = "";
        }
      }
      $output .= "<td style='".$style.$style_2."'".$tit.">".$zalozka.$cur."</td>\n";
  		$cur++; 
  		$col++; 
  	} else { 
  		$output .= "<td>&nbsp;</td>\n"; 
  		$col++; 
  	}
    if($col==8) { 
      $output .= "  </tr>\n"; 
      $col = 1; 
      $radku++;
    }
  }
  $td_mesice = "    <td rowSpan=\"".$radku."\">".strtoupper($jmeno_mesice)."</td>\n";
  return $td_mesice.$output;
};

$pocet_tydnu_v_roce = Date("W", mktime(0,0,0, 12, 28, $vybrany_rok));
echo "<p>Zvolený rok má ".$pocet_tydnu_v_roce." týdnů\n";
echo "<p><table border=\"1\" cellpadding=\"3\" cellspacing=\"0\" style=\"border-collapse:collapse; text-align:center;\" bordercolor=\"#111111\">\n";
echo "  <tr style=\"font-weight:bold;\">\n";
echo "    <td width=\"100\" rowSpan=\"2\">Měsíc</td>\n";
echo "    <td width=\"50\" rowSpan=\"2\">Číslo<br>týdne</td>\n";
echo "    <td colSpan=\"7\">Dny týdne</td>\n";
echo "  </tr>\n";
echo "  <tr style='background-color:#e9e9e9;'>\n";
echo "    <td width=\"25\">Po</td>\n";
echo "    <td width=\"25\">Út</td>\n";
echo "    <td width=\"25\">St</td>\n";
echo "    <td width=\"25\">Čt</td>\n";
echo "    <td width=\"25\">Pá</td>\n";
echo "    <td width=\"25\">So</td>\n";
echo "    <td width=\"25\">Ne</td>\n";
echo "  </tr>\n";
for($a=1; $a<=12; $a++) {
  echo VypisMesic($a, $vybrany_rok);
}
echo "</table>\n";
?>

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: