3v4l.org

run code in 150+ php & hhvm versions
Bugs & Features
<?php function drawMonth($month, $year, $jelentkezettNapok, $napiJelentkezokSzama) { // $months = Array("Január", "Február", "Március", "Április", "Május", "Június", "Július", // "Augusztus", "Szeptember", "Október", "November", "December"); //echo "<p class='honapNeve'>".$months[$month - 1]."</p>"; // echo "<table class='naptar'>"; // echo "<tr><th>H</th><th>K</th><th>Sz</th><th>Cs</th><th>P</th><th>Sz</th><th>V</th></tr>"; $firstDayOfTheMonth = mktime(0, 0, 0, $month, 1, $year); $d = getdate($firstDayOfTheMonth); // Vasarnap helyett hetfo az elso nap a heten. Pl. "6" jelentese: szombaton kezdodik a honap. $dayOfTheWeekOfFirstDayOfTheMonth = (6 + $d["wday"]) % 7 + 1; // Hany napos a honap. $totalDaysInCurrentMonth = date("t", $firstDayOfTheMonth); $kellenekUresNapokAHonapVegen = true; for ($i = 0; $i < $totalDaysInCurrentMonth + ($dayOfTheWeekOfFirstDayOfTheMonth - 1); $i++) { // Csak az aktuális héttől kezdve. Megjegyzés: date("W") hétfőt tekinti a hét első napjának, ami nekünk pont megfelel. $day = $i - $dayOfTheWeekOfFirstDayOfTheMonth + 2; $dateWeek = date("W", mktime(0, 0, 0, $month, $day, $year)); /*if (intval(date("W", $firstDayOfTheMonth)) > intval($dateWeek)) { continue; }*/ // NEW NEW NEW NEW ======================= $thisMondayInt = intval(date('Ymd', strtotime('- ' . (intval(date('N')) - 1) . ' days'))); $dateInt = intval(date("Ymd", mktime(0, 0, 0, $month, $day, $year))); if ($thisMondayInt > $dateInt) { continue; } // NEW NEW NEW NEW ======================= // A hónap végén azokat a heteket nem jelenítjük meg, amikre még nem lehetne jelentkezni. $utolsoJelentkezhetoNap = strtotime("+ 28 day"); $utolsoJelentkezhetoHet = intval(date("W", strtotime("+ 28 day"))); /*if ($utolsoJelentkezhetoHet < intval(date("W"))) { // Ez decemberben fordulhat elo, amikor is 28 nap mulva mar januarra esik. Ebben az esetben // az egesz honapot ki kell irni. $utolsoJelentkezhetoHet += 52; } TODO */ // date("W", mktime(0, 0, 0, 12, 31, 2012)) hibasan 1-et ad 53 helyett, ezert a december // honapot kulon kell kezelni. /*if (!($month == 12 && $day >= 3) && intval($dateWeek) > $utolsoJelentkezhetoHet) { $kellenekUresNapokAHonapVegen = false; continue; }*/ // NEW NEW NEW NEW ======================= $SundayOfFourWeeksLaterInt = intval(date('Ymd', strtotime('+ ' . (28 + 7 - intval(date('N', strtotime('+ 28 days')))) . ' days'))); if ($dateInt > $SundayOfFourWeeksLaterInt) { $kellenekUresNapokAHonapVegen = false; continue; } // NEW NEW NEW NEW ======================= if ($i % 7 == 0) { echo "<tr>"; } if ($i < $dayOfTheWeekOfFirstDayOfTheMonth - 1) { // Ures napok a honap elejen. echo "<td class='noborder'></td>"; } else if ($i < $totalDaysInCurrentMonth + $dayOfTheWeekOfFirstDayOfTheMonth - 1){ // Naptari napok. $day = $i - $dayOfTheWeekOfFirstDayOfTheMonth + 2; $date = date("Y-m-d", mktime(0, 0, 0, $month, $day, $year)); $napiJelentkezok = isset($napiJelentkezokSzama[$date]) ? $napiJelentkezokSzama[$date] : 0; // .... echo $day . "nap "; } else { // TODO(palinko): Kell ez? echo "<td class='noborder'></td>"; } if ($i % 7 == 6) { echo "</tr>"; } } // Üres napok a hónap végén. Csak akkor, ha nem üres hetet (7 üres napot) kellene kiírni. // TODO(palinko): $kellenekUresNapokAHonapVegen-t helyesen számolni eredetileg is. if ($kellenekUresNapokAHonapVegen && ($totalDaysInCurrentMonth + ($dayOfTheWeekOfFirstDayOfTheMonth - 1)) % 7 > 0) { for ($i = ($totalDaysInCurrentMonth + ($dayOfTheWeekOfFirstDayOfTheMonth - 1)) % 7; $i < 7; $i++) { echo "<td class='noborder'></td>"; } } // echo "</table>"; } drawMonth(12, 2012, array(), array()); drawMonth(1, 2013, array(), array()); ?>
Output for 5.1.2 - 5.6.28, hhvm-3.10.0 - 3.12.0, 7.0.0 - 7.1.0
<tr>3nap 4nap 5nap 6nap 7nap 8nap 9nap </tr><tr>10nap 11nap 12nap 13nap 14nap 15nap 16nap </tr><tr>17nap 18nap 19nap 20nap 21nap 22nap 23nap </tr><tr>24nap 25nap 26nap 27nap 28nap 29nap 30nap </tr><tr>31nap <td class='noborder'></td><td class='noborder'></td><td class='noborder'></td><td class='noborder'></td><td class='noborder'></td><td class='noborder'></td><tr><td class='noborder'></td>1nap 2nap 3nap 4nap 5nap 6nap </tr>
Output for 5.1.0 - 5.1.1
Output for 4.3.0 - 5.0.5
5nap 6nap 7nap 8nap 9nap </tr><tr>10nap 11nap 12nap 13nap 14nap 15nap 16nap </tr><tr>17nap 18nap 19nap 20nap 21nap 22nap 23nap </tr><tr>24nap 25nap 26nap 27nap 28nap 29nap 30nap </tr><tr>31nap <td class='noborder'></td><td class='noborder'></td><td class='noborder'></td><td class='noborder'></td><td class='noborder'></td><td class='noborder'></td><tr><td class='noborder'></td>1nap 2nap 3nap 4nap 5nap 6nap </tr><tr>7nap 8nap 9nap 10nap