Pocitanie veku

Programovacie jazyky, rady, poradňa...
lama2d
VIP
VIP
Príspevky: 1006
Registrovaný: 24 feb 2005, 14:54
Bydlisko: PostgreSQL

Pocitanie veku

Príspevok od používateľa lama2d »

Caute, potrebujem script, ktory mi vypocita vek uzivatela. Teda on si zada rok, mesiac a den narodenia. To sa ulozi v db do stlpca datetime. A teraz potrebujem pomoc! Ako spravim aby mi to vypocitalo jeho vek a vypisalo? Vopred dakujem... :)
ehm123
King
King
Príspevky: 1658
Registrovaný: 27 feb 2006, 6:45
Bydlisko: PD / Praha

Príspevok od používateľa ehm123 »

Neni to uplne presne,ale takto:

Kód: Vybrať všetko

<form action="index.php" method="post">
<div>Tvoj rok narodenia:<input type="text" name="year" value=""/></div>
<div>Tvoj mesiac narodenia:<input type="text" name="month" value=""/></div>
<div>Tvoj den narodenia:<input type="text" name="day" value=""/></div>
<div><input type="reset" value="Vymaž"/></td><td>
<input type="submit" value="Odošli" name="send"/></td><td></div>
</form>

<?
if (!empty($_POST['send'])):
 $rok = Date("Y");
 $mesiac = Date("n");
 $den = Date("j");
 $year = $_POST['year'];
 $month = $_POST['month'];
 $day = $_POST['day'];
   if ($month>$mesiac):
   $mm =$month-$mesiac;
   else:
   $mm =$mesiac-$month;
   endif;
    if ($den<day):
    $dd =$den-$day;
    else:
    $dd =$day-$den;
    endif;
 $yy = $rok-$year;
   if (empty($_POST['month'])):
   $mm=0;
   endif;
   if (empty($_POST['day'])):
   $dd=0;
   endif;
   if (!empty($_POST['month'])):
   $yy = $rok-$year-1;
   endif;
echo"Mas $yy rokov $mm mesiacov a $dd dni";
endif;
?>
môže ti to vyhodiť občas (-) ale inak som skusal a ide...ak ti to vyhodi (-) napis pri akom veku a ja sa nato pozrem ale zajtra lebo ma boli hlava..a napis ci funguje
lama2d
VIP
VIP
Príspevky: 1006
Registrovaný: 24 feb 2005, 14:54
Bydlisko: PostgreSQL

Príspevok od používateľa lama2d »

diky, ale potrebujem aby mi to vypocitalo na den presne
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

<?
$today=time();
$birthDate=strtotime("21.07.1986");
echo floor(($today-$birthDate)/(365*24*60*60));
?>
ehm123
King
King
Príspevky: 1658
Registrovaný: 27 feb 2006, 6:45
Bydlisko: PD / Praha

Príspevok od používateľa ehm123 »

mastermind napísal:<?
$today=time();
$birthDate=strtotime("21.07.1986");
echo floor(($today-$birthDate)/(365*24*60*60));
?>
lol a ja som to pisal na stranu :D
lama2d
VIP
VIP
Príspevky: 1006
Registrovaný: 24 feb 2005, 14:54
Bydlisko: PostgreSQL

Príspevok od používateľa lama2d »

mastermind - skusam a stale to vypisuje vek 37... Inac dik :D
warezman - chybne to vypisuje mesiace a dni, dik :)
ehm123
King
King
Príspevky: 1658
Registrovaný: 27 feb 2006, 6:45
Bydlisko: PD / Praha

Príspevok od používateľa ehm123 »

lama2d napísal:mastermind - skusam a stale to vypisuje vek 37... Inac dik :D
warezman - je to dlhe ale hlavne ze mi to ide, dik :)
tu mas to mastermindove,to moje nepouzivaj sice ti to vypise aj mesiace ma to dost chyb(minuska a tak),toto je asi lepšie,tu to je aj z formularom

Kód: Vybrať všetko

<form action="index.php" method="post">
<div>Tvoj rok narodenia:<input type="text" name="year" value=""/></div>
<div>Tvoj mesiac narodenia:<input type="text" name="month" value=""/></div>
<div>Tvoj den narodenia:<input type="text" name="day" value=""/></div>
<div><input type="reset" value="Vymaž"/></td><td>
<input type="submit" value="Odošli" name="send"/></td><td></div>
</form>

<?
if (!empty($_POST['send'])): 
 $year = $_POST['year'];
 $month = $_POST['month'];
 $day = $_POST['day']; 
$today=time();
$birthDate=strtotime("$day.$month.$year");
echo "Tvoj vek je ";
echo floor(($today-$birthDate)/(365*24*60*60));
endif;
?>
lama2d
VIP
VIP
Príspevky: 1006
Registrovaný: 24 feb 2005, 14:54
Bydlisko: PostgreSQL

Príspevok od používateľa lama2d »

Ano ale je tam niekde chyba, mne to ukazuje ze mam 37 rokov. Vlastne ak pouzijes hocijaky datum ukaze ti to vek 37 rokov :? .
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

skusal som zadat rozne formaty datumu a ukazuje to spravne. v akom formate zadavas datum??
ehm123
King
King
Príspevky: 1658
Registrovaný: 27 feb 2006, 6:45
Bydlisko: PD / Praha

Príspevok od používateľa ehm123 »

lama2d napísal:Ano ale je tam niekde chyba, mne to ukazuje ze mam 37 rokov. Vlastne ak pouzijes hocijaky datum ukaze ti to vek 37 rokov :? .
Chyba je u teba...vid. http://test.warezman.info/
test
Hardcore addict
Hardcore addict
Používateľov profilový obrázok
Príspevky: 5099
Registrovaný: 13 mar 2005, 5:20
Bydlisko: Doma

Príspevok od používateľa test »

warezman - Ide ti to zle, dal som 10.10.1986 a hodilo mi to vek 21, pricom tam ma byt 20 ;)
ppt
Darca
Darca
Používateľov profilový obrázok
Príspevky: 1920
Registrovaný: 27 máj 2006, 11:24
Kontaktovať používateľa:

Príspevok od používateľa ppt »

test napísal:warezman - Ide ti to zle, dal som 10.10.1986 a hodilo mi to vek 21, pricom tam ma byt 20 ;)
Mne vyhodilo 20 :P
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

test napísal:warezman - Ide ti to zle, dal som 10.10.1986 a hodilo mi to vek 21, pricom tam ma byt 20 ;)
Problém je v tom, že rok nemá 365 dní (teda priestupný nemá)

Kód: Vybrať všetko

$year = $_POST['year']
$month = $_POST['month']
$day = $_POST['day']
$d = date("d");
$m = date("m");
$y = date("Y");
$age = $y-$year;
if (($m < $month) || ($m == $month && $d < $day)) $age--; 
ehm123
King
King
Príspevky: 1658
Registrovaný: 27 feb 2006, 6:45
Bydlisko: PD / Praha

Príspevok od používateľa ehm123 »

test napísal:warezman - Ide ti to zle, dal som 10.10.1986 a hodilo mi to vek 21, pricom tam ma byt 20 ;)
ktore lebo jedno je od masterminda ja som iba prerobil formular a druhe je moje
lama2d
VIP
VIP
Príspevky: 1006
Registrovaný: 24 feb 2005, 14:54
Bydlisko: PostgreSQL

Príspevok od používateľa lama2d »

http://skuska01.tym.sk/
Este mi povedzte ze vam to ten vek ukazuje spravne a asi si skocim k ocnemu. Fakt uz neviem cim to je.... IC co? Ja som to vedel, taky debilny freehosting. Nakopat do riti. :?
mastermind
VIP
VIP
Používateľov profilový obrázok
Príspevky: 4810
Registrovaný: 09 feb 2005, 13:17

Príspevok od používateľa mastermind »

no takze vyriesene. povodny fungoval presne tak ako mal, akurat mala starsia verzia php problem s funkciou strtotime, ktora pri danom vstupe vyhadzovala chybu [-1]. Tym padom skript vyhodil 37 co je pocet rokov od timestamp 0.

dalo sa to riesit rozparsovanim datumu.

Kód: Vybrať všetko

<? 
$today=time();
$birthDate=mktime(0,0,0,21,7, 2000); 
echo floor(($today-$birthDate)/(31471200));
?>
alebo este lepsie a efektivnejsie zmenenim typu v db z DATETIME na TIMESTAMP.
lama2d
VIP
VIP
Príspevky: 1006
Registrovaný: 24 feb 2005, 14:54
Bydlisko: PostgreSQL

Príspevok od používateľa lama2d »

Dakujem all, karmu + davam uzvatelom: chrono, warezman a mastermind.
Mam tu vsak este jeden problem. Spravil som si na to select, ktory vypise 13 rokov pred 15 rokmi od auktualneho roku. To funguje v pohode. Odoslat sa to da, ale ked to chcem pomocou php scriptu neskor upravit, chcem aby mi ukazalo v selecte datum, ktory som predtym do DB ulozil. Z Timestamp si to viem rozlozit na den, mesiac a rok. Teda mam napriklad premennu $day ktora je 26, $month je 11 a $year je 1987. A teraz potrebujem aby mi ten datum 26.11.1987 ukazalo v selecte. Treba tam pridat podmienku ktoru ja neviem spravit, ze ak uz datum v DB zapisany je, tak ho nacita do selectu. Ale ak nie je, tak bude platit ten script nizsie. Viete aspon o co ide? :? Dakujem ...

tu je cast toho scriptu:

Kód: Vybrať všetko

echo "<select name=\"year\">";
$ycounter = date("Y")-28;
$y = date("Y")-15;
while ($ycounter<$y)
{
$ycounter++;
echo "<option value=$ycounter>$ycounter</option>";
}
echo "</select>";
chrono
VIP
VIP
Používateľov profilový obrázok
Príspevky: 7127
Registrovaný: 25 dec 2006, 15:17

Príspevok od používateľa chrono »

Pri tej položke, čo má byť zvolená, pridaj do tagu option: selected="selected"
Teda niečo ako:

Kód: Vybrať všetko

echo "<select name=\"year\">";
$ycounter = date("Y")-28;
$y = date("Y")-15;
while ($ycounter<$y)
{
$ycounter++;
echo "<option value=$ycounter";
if ($year == $ycounter) echo " selected=\"selected\"";
echo ">$ycounter</option>";
}
echo "</select>";
lama2d
VIP
VIP
Príspevky: 1006
Registrovaný: 24 feb 2005, 14:54
Bydlisko: PostgreSQL

Príspevok od používateľa lama2d »

Super dakujem. Perfektne to funguje. :)
DomCZo
Light Star
Light Star
Používateľov profilový obrázok
Príspevky: 235
Registrovaný: 16 okt 2006, 22:49

Príspevok od používateľa DomCZo »

mastermind napísal:no takze vyriesene. povodny fungoval presne tak ako mal, akurat mala starsia verzia php problem s funkciou strtotime, ktora pri danom vstupe vyhadzovala chybu [-1]. Tym padom skript vyhodil 37 co je pocet rokov od timestamp 0.

dalo sa to riesit rozparsovanim datumu.

Kód: Vybrať všetko

<? 
$today=time();
$birthDate=mktime(0,0,0,21,7, 2000); 
echo floor(($today-$birthDate)/(31471200));
?>
alebo este lepsie a efektivnejsie zmenenim typu v db z DATETIME na TIMESTAMP.
Ja nemam 17 rokov :-)

Este tam mas zameneny den s mesiacom.

mktime();
hodiny,minuty,sekundy,mesiac,den,rok

Spravne je to:

Kód: Vybrať všetko

<?php


$today = time();
$birthDate = mktime(0,0,0,7,21,2000);
echo floor(($today-$birthDate)/(365*24*60*60));


?>
Len teraz mi zase neide do hlavy, preco 365*24*60*60 = 31536000 a po druhykrat si priamo pouzil cislo 31471200.
Napísať odpoveď