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.

Člen

Zobrazeno 9 zpráv z 9.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
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.