ugrás a tartalomhoz

Idő összeadása és kivonása

gyuri11 · 2013. Júl. 12. (P), 21.43
Sziasztok!

Ahogyan itt nagyon sokan, segítségért fordulnék a közösséghez. Előre leszögezem, hogy egyáltalán nem vagyok profi a php-ban, pár ehte ismerkedek vele, tehát lelkes kezdő vagyok. Lehet, hogy olyat fogok kérdezni, ami a haladóknak vagy a profiknak egy nagyon egyszerű rutin feladat.

Időket szeretnék összeadni és kivonni, majd ezekkel különböző matematikai műveleteket végezni. Adott lenne egy tárgy, aminek az összes üzemideje tegyük fel 12:30 perc. Ez adatbázisban lenne letárolva. A felhasználó POST-al vagy GET-el egy űrlapon keresztül átadna használati időt az adott berendezéshez. Pl. 1:40 percet. Ekkor ugye az összes használat 14 óra 10 perc lenne. A kivonás ugye szintén hasonlóképpen műkedne, mert hát az időt másképpen nem lehet számolni.

Ez meghaladja az eddigi tudásomat, ezért szeretném kérdezni tőletek, hogy van e erre valamiféle működő (és egy kezdő számára is megérthető) függvény vagy bármilyen megoldás, amit alkalmazni tudnék? Néhány megoldást már találtam a különböző fórumokon, de mivel magyarázat nem volt hozzájuk így nem igazán látom át a működésüket.

Előre is köszönöm a válaszokat.
 
1

Másodperc

Poetro · 2013. Júl. 12. (P), 22.30
Minden át kell számolni másodpercre, vagy percre, és azzal számolni. Azaz az 1 óra 40 perc, az 100 perc, a 12 óra 30 perc pedig 750 perc. A kettőt csak össze kell adni, és kapsz 850 percet. Ami pedig ugye 14 óra és 10 perc. Ehhez nem kell PHP tudás, csak egyszerű matek.
2

Köszönöm a választ. Valóban

gyuri11 · 2013. Júl. 12. (P), 22.56
Köszönöm a választ. Valóban igazad van, ebből próbáltam kiindulni. Viszont úgy tűnik, hogy a matematikai tudásom is hiányos. Az addig teljesen rendben van, hogy külön változóként kezelem a két érteket, az órát felszorzom 60-al és összeadom őket. Ezzel számolni is valóban nagyon egyszerű. Azonban amikor visszaosztom pl. a 850 percet, akkor ugye egész számként megkapom az órát, viszont a percet nem. Mert az érték 14,166666667 lesz. Arra van e valamiféle matematikai megoldás, hogy a percet is 0-59 közt kapjam vissza? Tudom buta a kérdés, de ezért fordultam a közösséghez, mert tanulni szeretnék. Számomra is lényegesen egyszerűbb lenne perccel számolni.
3

maradékos osztás

duplabe · 2013. Júl. 12. (P), 23.10

$ora = (int) 850 / 60;
$perc = 850 % 60;
4

Köszönöm mind a két választ.

gyuri11 · 2013. Júl. 12. (P), 23.43
Köszönöm mind a két választ. Felnyitottátok a szemem. Viszont ha:

settype($szam, integer);

ez ha jól tudom felfelé is kerekít. (Ha esetleg nem, akkor a tudáshiány nem mentesít tudom)

Ugyanis arra gondoltam, hogy egyszerűen kiszámolom:

$szam = 850/60;
$ora = explode(".", $szam);

$perc = 850-($ora*60);

Ezt sikerült összehoznom. Nagyon köszönöm az iránymutatást.

Lenne még egy kérdésem. És megmondom őszintén nem szeretnék ennek a buta kérdésemnek is topicot nyitni. Talán észreveszi valaki.

Szövegdobozból adatbázisba tárolok le értéket. A mondatok tartalmaznak szóközöket és sortöréseket. Ez az adatbázisban még gyönyörű. Azonban amikor kiolvasom az adatbázisból és meg szeretném jeleníteni, vagy éppen tovább adom GET-el, akkor eltűnnek a mondatok közti szóközök és a sortörések.

Erre a problémára esetleg lenne megoldási javaslatotok?
5

A számolásnál csináld, ahogy

Joó Ádám · 2013. Júl. 12. (P), 23.56
A számolásnál csináld, ahogy Duplabe írta, az a korrekt.

A sortörések azért tűnnek el, illetve azért hullanak össze a szóközök, mert a HTML alapbeállítás szerint így jelenik meg (ez teszi lehetővé, hogy olvashatóan tördeld a forrást). Ha meg akarod őket jeleníteni, akkor több lehetőséged van, a tartalom jellegétől függ, hogy melyik a helyes: beteheted egy pre elembe, ami előre tördelt szöveghez való, megadhatod ugyanezt a tulajdonságot CSS-ből, ha csak látvány szempontjából fontos, használhatsz br elemet, ha a tartalmi jelentősége van a sortörésnek (pl. versnél), vagy teheted a szöveget blokkszintű elemekbe (pl. bekezdésekbe).

Új kérdésnek pedig nyugodtan nyiss új témát.
6

Fogalmam sincs, hogy mit

gyuri11 · 2013. Júl. 13. (Szo), 00.34
Fogalmam sincs, hogy mit rontok el vagy mit értelmezek félre. Igen Duplabe megoldása nagyon korrekt és egyszerű a perc számításánál. Viszont az óra számításánál ugyanúgy tizedes értéket kapok vissza.

<?
$ora = (int) 850 / 60;
$perc = 850 % 60;
print "$ora";
print "<br>";
print "$perc";
?>

Eredményoldal:
14.166666666667
10

Azért nem nyitottam új téémát mert tényleg nem akarok fölöslegesen az egyszerű kérdéseimmel terhelni a fórumot. Komolyabb témák vannak itt, mint az én amatőr kérdéseim.

Csak látvány szempontjából lenne fontos. Nézd el nekem, most megint butaságot írok.

Kódom:

<tr>
<td>Megjegyzés:</td>
<td><textarea name="megjegyzes"><pre><?= $_GET['megjegyzes'] ?></pre></textarea></td>
</tr>

Eredményoldalam:

<pre>Ez egy megjegyzés.Ami akár lehetne több soros is, ha nem lennék analfabéta a megjelenítéshez.</pre>

Nyilvánvalóan hibásan használom a pre taget. Hogyan kellene használnom ebben a formában?
8

floor

Poetro · 2013. Júl. 13. (Szo), 07.00
Mondjuk én ebben az esetben a floor függvényt használnám az óra értékének kerekítésére.
7

Tesztelgettem közben. Az

gyuri11 · 2013. Júl. 13. (Szo), 02.05
Tesztelgettem közben. Az egész számmal nem vergődtem továbbra sem zöldágra.

A megjelenítéssel kapcsolatban valószínűleg rosszul tettem fel a kérdést, vagy ismét a hiányos tudásom áldozata lettem.

HTML-be illesztve igazad van Ádám. Köszönöm, mert eddig sem tudtam.

<?
print "<pre>";
print $sor["megjegyzes"];
print "</pre>";
}

?>

Ez így tökéletesen működik. De ha ugye a szövegdobozba szeretném betenni adatbázisból a tárolt adatokat, akárhova teszem a tagokat, nem működik.
9

nl2br()

pkadam · 2013. Júl. 13. (Szo), 10.59
Amit keresel, az az nl2br() függvény (vagyis new line to br). Ez az újsor-karaktereket alakítja a böngésző által megjelenített sortörésnek. A szövegdobozba ütött Entereket az adatbázis újsor-karakterként menti, ez azonban csak a forráskódban kerül új sorba, a böngésző <br> elemmé alakítva renderel belőlük szövegközi sortörést.

Az egész számra lefelé kerekítés az említett floor() függvénnyel egészen egyszerű: a floor(16.7) kiadja, hogy 16.
11

Köszönöm szépen. Este ki

gyuri11 · 2013. Júl. 13. (Szo), 12.21
Köszönöm szépen. Este ki fogom próbálni.
14

floor()

gyuri11 · 2013. Júl. 19. (P), 02.47
Köszönöm a segítséget. A floor() tökéletesen működik. Az nl2br-el még reszelnem kell, mert egyelőre nem sikerül működésre bírnom.
16

Itt a kódrészletem: <tr>

gyuri11 · 2013. Júl. 19. (P), 03.02
Itt a kódrészletem:

<tr>
<?

$megjegyzes = nl2br($_GET['megjegyzes']);

?>
<td valign="top">Megjegyzés:</td>
<td><textarea name="megjegyzes"><?= $megjegyzes ?></textarea></td>
</tr>


Természetesen nem működik. A letárolásnál is kellene valamit trükközni? Az adatbázisban teljesen jól néz még ki. Vagy a GET-el lesz gond? Esetleg már amikor a GET-nek átadom, előtte kellene a függvényt alkalmaznom?
17

A nem működik mit jelent? Mit

Joó Ádám · 2013. Júl. 19. (P), 03.46
A nem működik mit jelent? Mit látsz a HTML forrásban?
18

Ugyanazt látom, amit a

gyuri11 · 2013. Júl. 19. (P), 11.53
Ugyanazt látom, amit a függvény nélkül. Nem lesznek szóközök.

pl. az adatbázisban ezt látom:

teszt1

teszt2

Amit pedig bekülden forrást:

teszt1teszt2

Nekem úgy tűnik, mint ha a letárolásnál, vagy az átadásnál eltűnnének a mondatok közti szóköz elemek és sortörések.
20

Természetesen nem működik. A

janez · 2013. Júl. 21. (V), 02.47
Természetesen nem működik. A letárolásnál is kellene valamit trükközni? Az adatbázisban teljesen jól néz még ki. Vagy a GET-el lesz gond? Esetleg már amikor a GET-nek átadom, előtte kellene a függvényt alkalmaznom?


Nem olvastam vissza így nem teljesen tiszta mi a célod, de ha ez:

Ha a textarea-ban megakarod tartani a sortöréseket, akkor oda az eredetileg kapott változatot töltsd be. (Persze azért préseld át szűrőkön)

Az nl2br "\r\n vagy \n" elemeket <br>-é alakítja. Ami jó neked a <p>,<div>,<span> stb. html elemekbe.
a <textarea>-ba pedig a hagyományos változatra lesz szükséged.

<?php $note = htmlspecialchars($_GET['megjegyzes'], ENT_QUOTES); ?>
<p><?=nl2br($note)?></p>

<textarea><?=$note?></textarea>
Remélem tudtam segíteni.
10

De ha ugye a szövegdobozba

Poetro · 2013. Júl. 13. (Szo), 11.44
De ha ugye a szövegdobozba szeretném betenni adatbázisból a tárolt adatokat, akárhova teszem a tagokat, nem működik.

Mert oda sortöréseket (\n) kell rakni.
12

Sajnos nem tudom mindezt

gyuri11 · 2013. Júl. 13. (Szo), 12.27
Sajnos nem tudom mindezt hogyan, ezért kértem segítséget. Megpróbálkozom majd a függvénnyel.
13

Nem értem

Pepita · 2013. Júl. 14. (V), 01.10
Nem értem, hogy a többiek miért nem a PHP Dátum/idő függvényeit ajánlották átolvasásra.

Persze, értem, nem az volt a kérdés, hanem a matek, és jelezted is, hogy most kezdted. Viszont ha tovább is akarsz fejlődni, akkor mindenképpen sokat olvasd a kézikönyvet (is)! Ez egyébként számos formában letölthető is.
15

Alapvetően a date()

gyuri11 · 2013. Júl. 19. (P), 02.49
Alapvetően a date() fügvénnyel néhány dolgot meg tudok csinálni. A mostani feladatomhoz a korábbi válaszok teljes mértékben elengedőnek bizonyultak. Amint lesz egy kis időm megpróbálom ezzel a fügvénnyel is megvalósítani ugyanezt.
19

Az jó

Pepita · 2013. Júl. 20. (Szo), 19.33
De nem egy függvényről van szó, legyél tisztában minddel. Ha jól emlékszem, Janoszen írt egyszer erről, csak nem tudom, hogy itt, vagy a saját oldalán. De mindenképp előbb-utóbb kelleni fog, mert időzóna, óraállítás, stb.... Szóval csak hajrá tanulni, egyre jobb leszel!