Diskuze: Jak získat při zadání roku jeho 256 den ?
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Zobrazeno 9 zpráv z 9.
K personalizaci obsahu a reklam, poskytování funkcí sociálních médií a analýze naší návštěvnosti využíváme soubory cookie. Informace o tom, jak náš web používáte, sdílíme se svými partnery pro sociální média, inzerci a analýzy. Partneři tyto údaje mohou zkombinovat s dalšími informacemi, které jste jim poskytli nebo které získali v důsledku toho, že používáte jejich služby.
Používáme nezbytné cookies pro fungování webu a s tvým souhlasem také analytické a marketingové cookies.
Zajišťují základní funkce, bezpečnost a služby, které sis vyžádal. Nelze je vypnout.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| ITnetwork | ITnetwork | Provoz webu, relace, přihlášení a uložení nastavení cookies. | PHPSESSID, auth_token, sid, itn_consent_impression, __Host-itn_consent | Relace až 1 rok |
| Google Tag Manager | Správa značek a načítání měřicích nástrojů webu. | Žádné | Neukládá se | |
| Google Fonts | Načítání typografie webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google Hosted Libraries | Načítání potřebných knihoven a stylů webu. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele | |
| Google reCAPTCHA | Ochrana formulářů a webu před zneužitím. | _GRECAPTCHA, rc::a, rc::b, rc::c, rc::f | Relace až 180 dní | |
| YouTube | Přehrávání vloženého video obsahu. | localStorage, IndexedDB; cookies after playback interaction | Relace až trvalé úložiště | |
| Vimeo | Vimeo | Přehrávání vloženého video obsahu. | __cf_bm, _cfuvid, vuid, localStorage, IndexedDB | Relace až 2 roky |
| Facebook Login | Meta | Přihlášení pomocí účtu třetí strany. | Úložiště řízené poskytovatelem | Relace až 1 rok |
| GoPay | GoPay | Zpracování uživatelem vyžádané platby. | Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
Pomáhají nám porozumět používání webu a zlepšovat ho.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Analytics 4 | Měření návštěvnosti a používání webu. | _ga, _ga_* | Až 2 roky | |
| Microsoft Clarity | Microsoft | Měření návštěvnosti a používání webu. | _clck, _clsk, _cltk | Relace až 1 rok |
Slouží k měření kampaní, personalizaci reklamy a marketingové komunikaci.
| Služba | Poskytovatel | Účel | Cookies a úložiště | Doba uložení |
|---|---|---|---|---|
| Google Ads | Měření kampaní, reklama a remarketing. | _gcl_au, _gcl_ls | Relace až 90 dní | |
| Meta Pixel | Meta | Měření kampaní, reklama a remarketing. | _fbp, _fbc, localStorage | Až 90 dní |
| Sklik | Seznam.cz | Měření kampaní, reklama a remarketing. | retargeting, sid, szn:* | Relace až trvalé úložiště |
| LinkedIn Insight | Měření kampaní, reklama a remarketing. | bcookie, li_gc, lidc, __cf_bm | Relace až 1 rok | |
| Ecomail | Ecomail.cz | Měření kampaní, reklama a remarketing. | ecmid, Úložiště řízené poskytovatelem | Dle podmínek poskytovatele |
| Atribuce kampaní ITnetwork | ITnetwork | Přiřazení návštěvy a objednávky ke kampani. | campaign_clid[*], user_session_context | Až 1 rok |
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Řešení by mohlo být zhruba následující:
Prvky datumu tvoří celistvou jednotku, vytvoř si tedy pro to šablonu.
class MyDate
{
public $d;
public $m;
public $y;
}
Funkci pro zjištění přestupného roku leapYear() si odděl od ostatního.
Funkce pro vrácení programátorského dne by pak mohla vypadat zhruba takto:
function getProgDate($year)
{
$progdate = new MyDate();
$progdate->d = leapYear($year) ? 12 : 13;
$progdate->m = 9;
$progdate->y = $year;
return $progdate;
}
Datum bude třeba někam uložit:
$pdate = getProgDate(1985);
Získání jednotlivých částí data:
$day = $pdate->d;
$month = $pdate->m;
$year = $pdate->y;
DarkCoder: Obavam se, ze problem je spis v tom, ze je to ukol do skoly a
nejde pouzivat php funkce pro zjisteji prestupneho roku 
Tereza Rezková: A v cem je problem? Co jsi zkousela? Treba googlem najit
reseni? Nebo mas nejaky php kod, ktery neni obrazek a da se zkopirovat z forka
do meho php?
Asi by to mohlo fungovat. Takze treba uvest nejake priklady, kdy to nefungovalo
spravne?
Html kod, predelany z tveho php... Sikovne pro testovani online 
https://jsfiddle.net/dwujLv4b/1/
<pre id=x></pre>
<script>
function aaa (y)
{
if (y%4==0 && y%100!=0 || y%400==0)
return '12.9.'+y
return '13.9.'+y
}
var str='';
str += aaa(1996) + "\n" // je
str += aaa(2000) + "\n" // je
str += aaa(2100) + "\n" // neni, ma vratit 13
str += aaa(1985) + "\n" // neni, ma vratit 13
document.getElementById('x').innerHTML = str;
</script>
<!--
12.9.1996
12.9.2000
13.9.2100
13.9.1985
-->
Ahoj, zkoušela jsem třeba tohle, ale pořád to nevede úplně k mojí spokojenosti.
<?php
//echo date("z", mktime(0,0,0,8,8,2008))+1;
// function cal_days_in_year($year){
// $days=256;
// for($month=1;$month<=12;$month++){
// $days =$days + cal_days_in_month(CAL_GREGORIAN,$month,1998);
// }
// return $days;
//}
//echo cal_days_in_year($year);
//echo date("z, $days")
//
//
// function cal_days_in_year($year){
// $days=256;
// for($month=1;$month<=12;$month++){
// $days = $days + cal_days_in_month(CAL_GREGORIAN,$month,$year);
// }
// return $days;
//}
//echo cal_days_in_year(1992);
// function cal_days_in_year($year){
// $days=256;
// for($month=1;$month<=12;$month++){
// $days = $days + cal_days_in_month(CAL_GREGORIAN,$month,$year);
// }
// return $date;
//}
//echo cal_days_in_year(1992);
//echo date("z, 256");
$date = "2020";
//$date("Y, 1992");
echo date("j, m, D, Y");
?>
Pořád mi to ale nevrací, úplně to co potřebuji. Moc nevím, kde najít chybu.
Stačí Ti dvě funkce - pro určení, zda rok je přestupný isLeapYear() a pro vrácení celého data getProgDay().
function isLeapYear($year){
return ((($year % 4) == 0) && ((($year % 100) != 0) || (($year % 400) == 0)));
}
function getProgDay($year){
return (isLeapYear($year)) ? ("12.9." . $year) : ("13.9." . $year);
}
A použití funkce:
$day = getProgDay(1985);
echo $day;
Viz DarkCoder. Uplne nechapu, proc tam carujes s tim mktime. Potrebujes
to?
Vsimni si, ze ja v tom javascriptu zadny prevod nepouzivam.
$time_stamp = mktime(0, 0, 0, 7, 1, 2000) // prevod na casove razitko (integer cislo v milisekundach) pocitane od roku 1970
$date_string = date('j.n.Y', $time_stamp ) // prevod zpet na string
https://www.php.net/manual/en/function.date.php
$today = date("j, n, Y"); // 10, 3, 2001
// proc to nevracis primo jako string?
return "12.9." . $year
Jako, nerikam, ze je to spatne, obcas se to pouziva pro overeni existence
datumu.
A v tom kodu mas vsechno zakomentovane. Takze nevim, co si vybrat ke zkouseni.
To vypada spis jako vykopirovane nejake priklady.
Ahoj, a co kdybych potrebovala upravit funkciu takto: aby brala do úvahy fakt, že pred rokom 1918 sa za prestupné roky počítali všetky roky deliteľné 4. Napr. programmerDay2(1900) vráti "12.09.1900", lebo ide o prestupný rok.
Tak se funkce getProgDay() vůbec nezmění. Bude se měnit funkce pro určení přestupného roku isLeapYear().
Přidáš jednu podmínku navíc:
function isLeapYear($year) {
if ($year < 1918) return (($year % 4) == 0);
return ((($year % 4) == 0) && ((($year % 100) != 0) || (($year % 400) == 0)));
}
Zde vidíš, jak je užitečné rozdělit celý problém do menších kousků. Nehledej v tom nic složitého.
Zobrazeno 9 zpráv z 9.