Autor | Zpráva | ||
---|---|---|---|
jtfcobra Profil |
Dobrý den potřeboval bych v PHP udělat rozpočítání hodin jen do pracovních dnů poradíte jak na to?
Například mám 80 hodin a potřebuji to dostat do pracovních dnů těch je cca 20 (4hodiny deně) <?php function cesky_mesic($mesic) { static $nazvy = array(1 => 'leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec'); return $nazvy[$mesic]; } echo cesky_mesic(date("n")) . "\n"; function cesky_den($den) { static $nazvy = array('neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'); return $nazvy[$den]; } echo cesky_den(date("w")) . "\n"; ?> |
||
Tomášeek Profil |
#2 · Zasláno: 27. 1. 2017, 10:45:39
jtfcobra:
No, popravdě nerozumím tomu, proč máš vytvořené funkce den/měsíc česky, ty s dotazem přeci nesouvisí. Jinými slovy, nemáš zatím nic, že? Píšeš o 80 hodinách a 20 dnech? Odkdy (do kdy) se má těch 20 dní počítat? Je to 20 dní v kuse? Co státní svátky? Pokud nic z toho řešit nechceš/nepotřebuješ, tak si jen postupnou iterací procházej měsíc po měsíci a v nich jednotlivé dny, v Po-Pá si přičti jedničku a po dvacátém záznamu iteraci ukonči. |
||
jtfcobra Profil |
#3 · Zasláno: 27. 1. 2017, 11:03:41
Stačí mi dny po - pá
|
||
Tomášeek Profil |
#4 · Zasláno: 27. 1. 2017, 11:09:36
jtfcobra:
A problém je tedy kde? Postup k řešení jsem ti popsal výše, kód za tebe psát nebudu. Jen to tvrzení lehce doplním/upřesním, a sice: Postupnou iterací procházej měsíc po měsíci a v nich jednotlivé dny, počínaje dnem, který považuješ za první pracovní (pokud to bude 3. listopadu, nebudeš procházet měsíce od ledna, ale začneš listopadem), v Po-Pá si přičti jedničku a po dvacátém záznamu iteraci ukonči. |
||
jtfcobra Profil |
Mam to takle:
jen mi jeste nejdou ty ceske dny a musim dopredu spocitat kolik je na den <?php $rok=2016; $mesic=1; $pocethodin=85; $nastavhodiny=4.0; $number = cal_days_in_month(CAL_GREGORIAN, $mesic, $rok); // 31 echo 'Pocet dni '.$number.'</br>'; function cesky_den($den) { static $nazvy = array('neděle', 'pondělí', 'úterý', 'středa', 'čtvrtek', 'pátek', 'sobota'); return $nazvy[$den]; } $pracovnidny=0; for($d=1; $d<=$number; $d++) { $time=mktime(12, 0, 0, $mesic, $d, $rok); if (date('m', $time)==date('m')) $datum=date('Y-m-d', $time); $nazevden=date('D', $time); if ($nazevden=='Sun' || $nazevden=='Sat') {} else {$pracovnidny=$pracovnidny+1; echo $datum.' nazev dne '.$nazevden.' odpracovano '.$nastavhodiny.' hodin</br>';}; } $vysledek=$pocethodin/$pracovnidny; echo 'Pocet pracovnich dni: '.$pracovnidny.' , celkove '.$vysledek.' na den'; ?> |
||
Tomášeek Profil |
#6 · Zasláno: 27. 1. 2017, 14:44:40
jtfcobra:
„jen mi jeste nejdou ty ceske dny“ To bude tím, že tu funkci nikde nevoláš. „musim dopredu spocitat kolik je na den“ Tomu moc nerozumím. Když chceš něco popsat, zkus to lépe a srozumitelněji. Zároveň místo "tohle mám, nějak se tím proberte" doplň, co to aktuálně dělá a co by to ještě dělat mělo. Celkově to řešení je takové zatím nic moc, ještě se trochu snaž. Třeba to vůbec neřeší hodiny napříč více měsíci. Na 21. řádku máš nějakou divokou konstrukci s prázdným tělem podmínky, lepší by bylo if (!in_array($nazevden, array('Sat', 'Sun'))) { // ... } |
||
Keeehi Profil |
#7 · Zasláno: 27. 1. 2017, 16:13:44
jtfcobra:
Pokud chceš zjistit, kolik je dní po-pá v měsíci, pak můžeš použít function get_number_of_week_days($month, $year) { $lastday = date("t", mktime(0, 0, 0, $month, 1, $year)); $weekdays = 20; for ($day = 29; $day <= $lastday; $day++) { if (date("N", mktime(0, 0, 0, $month, $day, $year)) < 6) { $weekdays++; } } return $weekdays; } |
||
jtfcobra Profil |
#8 · Zasláno: 28. 1. 2017, 13:02:17
Udelal jsem to takle jeste doladim kod jen nevim jak pricist cas treba 9:00 + 4 hodiny ?
<?php $rok=2016; $mesic=1; $pocethodin=85; $jmeno='Neznamy'; $number = cal_days_in_month(CAL_GREGORIAN, $mesic, $rok); // 31 echo 'Pocet dni '.$number.'</br></br>'; $pracovnidnyy=0; // Spocita hodiny for($k=1; $k<=$number; $k++) { $time=mktime(12, 0, 0, $mesic, $k, $rok); if (date('m', $time)==date('m')) $datum=date('Y-m-d', $time); $nazevden=date('D', $time); if ($nazevden=='Sun' || $nazevden=='Sat') {} else {$pracovnidnyy=$pracovnidnyy+1;}; }; $nastavhodiny=$pocethodin/$pracovnidnyy; // Vypise pracovni dny for($d=1; $d<=$number; $d++) { $time=mktime(12, 0, 0, $mesic, $d, $rok); if (date('m', $time)==date('m')) $datum=date('Y-m-d', $time); $nazevden=date('D', $time); if ($nazevden=='Mon' ) {$nazevdencesky='Pondeli';}; if ($nazevden=='Tue' ) {$nazevdencesky='Utery';}; if ($nazevden=='Wed' ) {$nazevdencesky='Streda';}; if ($nazevden=='Thu' ) {$nazevdencesky='Ctrvtek';}; if ($nazevden=='Fri' ) {$nazevdencesky='Patek';}; if ($nazevden=='Sun' || $nazevden=='Sat') {} else { echo 'Jmeno zamestnance: '.$jmeno.' '.$datum.',prichod 9:00, nazev dne '.$nazevdencesky.' odpracovano '.$nastavhodiny.' hodin</br>';}; } echo '</br>Pocet pracovnich dni: '.$pracovnidnyy.' , celkove '.$nastavhodiny.' na den'; ?> Vysledek Pocet dni 31 Jmeno zamestnance: Neznamy 2016-01-01,prichod 9:00, nazev dne Patek odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-04,prichod 9:00, nazev dne Pondeli odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-05,prichod 9:00, nazev dne Utery odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-06,prichod 9:00, nazev dne Streda odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-07,prichod 9:00, nazev dne Ctrvtek odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-08,prichod 9:00, nazev dne Patek odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-11,prichod 9:00, nazev dne Pondeli odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-12,prichod 9:00, nazev dne Utery odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-13,prichod 9:00, nazev dne Streda odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-14,prichod 9:00, nazev dne Ctrvtek odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-15,prichod 9:00, nazev dne Patek odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-18,prichod 9:00, nazev dne Pondeli odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-19,prichod 9:00, nazev dne Utery odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-20,prichod 9:00, nazev dne Streda odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-21,prichod 9:00, nazev dne Ctrvtek odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-22,prichod 9:00, nazev dne Patek odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-25,prichod 9:00, nazev dne Pondeli odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-26,prichod 9:00, nazev dne Utery odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-27,prichod 9:00, nazev dne Streda odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-28,prichod 9:00, nazev dne Ctrvtek odpracovano 4.047619047619 hodin Jmeno zamestnance: Neznamy 2016-01-29,prichod 9:00, nazev dne Patek odpracovano 4.047619047619 hodin Pocet pracovnich dni: 21 , celkove 4.047619047619 na den |
||
Keeehi Profil |
#9 · Zasláno: 28. 1. 2017, 15:39:18
jtfcobra:
Když to lehce učešeš, tak to může vypadat takto <?php $rok=2016; $mesic=2; $pocethodin=85; $jmeno='Neznamy'; function get_number_of_week_days($month, $year) { $lastday = date("t", mktime(0, 0, 0, $month, 1, $year)); $weekdays = 20; for ($day = 29; $day <= $lastday; $day++) { if (date("N", mktime(0, 0, 0, $month, $day, $year)) < 6) { $weekdays++; } } return $weekdays; } $number = cal_days_in_month(CAL_GREGORIAN, $mesic, $rok); // 31 echo 'Pocet dni '.$number.'</br></br>'; $pracovnidny = get_number_of_week_days($mesic, $rok); $nastavhodiny = $pocethodin / $pracovnidny; for($d=1; $d<=$number; $d++) { $time=mktime(12, 0, 0, $mesic, $d, $rok); $den = date('w', $time); $nazevdencesky = ['Nedělě', 'Pondělí', 'Úterý', 'Středa', 'Čtvrtek', 'Pátek', 'Sobota'][$den]; if ($den != 0 && $den != 6) { echo 'Jmeno zamestnance: '.$jmeno.' '.date('Y-m-d', $time).',prichod 9:00, nazev dne '.$nazevdencesky.' odpracovano '.$nastavhodiny.' hodin</br>'; } } echo '</br>Pocet pracovnich dni: '.$pracovnidny.' , celkove '.$nastavhodiny.' na den'; ?> |
||
jtfcobra Profil |
#10 · Zasláno: 28. 1. 2017, 18:18:14
jediny co mam problem je ten odchod
Přichod je vždy v 9:00 + $nastavhodiny ale vychazi to samosrejmne kravina |
||
Keeehi Profil |
#11 · Zasláno: 28. 1. 2017, 18:42:18
jtfcobra:
Jako že ten čas 4.04761.... hodin chceš přičíst k 9:00 a zjistit tak konec? <?php $nastavhodiny=4.047619047619; $intervalMinutes = (int)(60 * $nastavhodiny); $start = new DateTime('9:00'); $start->add(new DateInterval("PT{$intervalMinutes}M")); echo $start->format('H:i'); |
||
Časová prodleva: 7 let
|
0