Autor Zpráva
Karmel
Profil *
Prosím o pomoc někoho, kdo by uměl získat skript z této stránky: http://www.prckoviste.cz/karolina
Jde mi o ten výpočet věku.

Děkujuuuu.

Moderátor Davex: Titulek „Prosím o pomoc se získáním JS z externího souboru“ nevystihuje podstatu dotazu. Příště zkus prosím vymyslet lepší.
Joker
Profil
Ten výpočet věku (alespoň na první pohled) vypadá spíš dělaný skriptem na serveru, než JS.

Ovšem i v JS by nebylo tak těžké to udělat, na to stačí objekt Date, metody getFullYear, getMonth a getDate a odčítání. Objekt Date dokonce umí i „podtéct“ záporné hodnoty do předchozího měsíce/roku, jen je potřeba si dát pozor, že měsíce jsou číslované 0-11 a ne 1-12 (takže třeba 1 je únor), zatímco dny normálně od jedničky a 0 je už poslední den předchozího měsíce (takže například new Date(2011, 0, -1) je 30. prosince 2010 a new Date(2011, 1, 0) je 31. ledna 2011)
Karmel
Profil *
Joker:
Já mám tento skript, ovšem nějak mi v tom roce 2011 začíná haprovat a neumím to opravit, aby fungoval.
Pířklad přímo k dnešku, tj. 9.1.2011. Kdybych na 9. řádku nedala toto: var monthOfToday = today.getMonth() + 1; //chyba … ukazovalo by mi to, že je dítěti 7 měsíců, při tom je mu k dnešnímu dni 8 měsíců. Až bude ovšem 1.2.2011 a já tam nechám to +1, tak se mi ukáže 9 měsíců a 23 dní, místo 8 měsícu a 23 dní. Takže to hapruje při začátku nového měsíce a při dni, kdy má dané dítě narozeniny a já vůbec neumím odhalit, v čem je zakopaný pes. Poradíte?

<script>

//Varibles containg values of date of birth : Replace with your own values 
//Default date given : 03.11.1981 (dd.mm.yyyy) = my date of birth 
var dayOfBirth = 09; //den narozeni 
var monthOfBirth = 05; //mesic narozeni 
var yearOfBirth = 2010; //rok narozeni :: Use all the 4 digits, not 2 two digits in short form 

//Variables containg values of current date 
var today = new Date(); //dnešní datum
var dayOfToday = parseInt(today.getDate());  //den dnes
var monthOfToday = today.getMonth() + 1;  //chyba
//var monthOfToday = today.getMonth();  //mesíc dnes
//var yearOfToday = today.getYear(); //rok dnes
var yearOfToday = today.getFullYear(); //rok dnes, opraveno kvulí zobrazování v opeře 10.50 jako roku 110


//promenne pozadavané pro výpočet věku 
var yearDiff;  //počet let
var monthDiff;  //počet měsíců
var daysDiff;  //počet dní

var totalNumOfDaysOfMonths = [31,28,31,30,31,30,31,31,30,31,30,31]; 
var ageString; 

AgeUptodate(); 

function AgeUptodate() 
{ 
    calcYearDiff(); 
} 

function calcYearDiff() 
{ 
    if (monthOfToday > monthOfBirth) 
    { 
    yearDiff = yearOfToday - yearOfBirth; 
    monthDiff = monthOfToday - monthOfBirth; 
    calcDateDiff(); 
    } 

    else if (monthOfToday == monthOfBirth) 
    { 
        if((dayOfToday == dayOfBirth) || (dayOfToday > dayOfBirth)) 
        { 
        yearDiff = yearOfToday - yearOfBirth; 
        } 
        else 
        yearDiff = yearOfToday - yearOfBirth - 1; 

        calcMonthDiff(); 

    } 
    else 
    { 
        yearDiff = yearOfToday - yearOfBirth - 1; 
        monthDiff = 12 - (monthOfBirth - monthOfToday); 

        calcDateDiff(); 
    } 
} 

function calcMonthDiff() 
{ 
    if (monthOfToday == monthOfBirth) 
    { 
        if (dayOfToday > dayOfBirth) 
        monthDiff = monthOfToday - monthOfBirth; 
        else if ( dayOfToday == dayOfBirth ) 
        monthDiff = 0; // That's a Birthday 
        else 
        monthDiff = 11; // Birthday coming soon 
    } 
    calcDateDiff(); 
} 

function calcDateDiff() 
{ 
    if ( yearOfToday % 4 == 0 ) 
    totalNumOfDaysOfMonths[1] = 29; 

    if (dayOfToday > dayOfBirth) 
    daysDiff = dayOfToday - dayOfBirth; 
    else if (dayOfToday == dayOfBirth) 
    daysDiff = 0; 
    else 
    { 
        daysDiff = ( totalNumOfDaysOfMonths[monthOfToday - 0] - dayOfBirth) + dayOfToday; 
    } 


    process(); 

} 

function process() 
{ 
    if((monthOfToday > monthOfBirth) && (dayOfToday < dayOfBirth)) 
    monthDiff -= 1; 

    if(yearDiff == 0) 
    ageString = ''; 
    else if (yearDiff == 1) 
    ageString = yearDiff + ' rok'; 
    else if (yearDiff < 5) 
    ageString = yearDiff + ' roky'; 
    else 
    ageString = yearDiff + ' roku'; 

    if((!((monthDiff == 0) && (daysDiff == 0))) && (yearDiff != 0)) 
    ageString = ageString + ', '; 

    if(monthDiff == 0) 
    ageString = ageString +''; 
    else if (monthDiff == 1) 
    ageString = ageString + '1 měsíc '; 
    else if (monthDiff < 5) 
    ageString = ageString + monthDiff +' mesice '; 
    else 
    ageString = ageString + monthDiff +' mesicu '; 

    if(daysDiff == 0) 
    ageString = ageString + ''; 
    else if (daysDiff == 1) 
    { 
        if(!(yearDiff == 0) && (monthDiff == 0)) 
        ageString = ageString + 'a 1 den'; 
        else 
        ageString = ageString + 'a 1 den'; 
    } 
    else if (daysDiff < 5) 
    { 
        if(!(yearDiff == 0) && (monthDiff == 0)) 
        ageString = ageString + 'a ' + daysDiff + ' dny'; 
        else 
        ageString = ageString + 'a ' + daysDiff + ' dny'; 
    } 
    else 
    { 
        if(!(yearDiff == 0) && (monthDiff == 0)) 
        ageString = ageString + 'a ' + daysDiff + ' dni'; 
        else 
        ageString = ageString + 'a ' + daysDiff + ' dni'; 
    } 

    document.write(ageString); 
    //document.write(ageString);
    //document.write('Můj věk dnes je ' + ageString + '.'); 
    //document.write('<br>Dnes je ' + today + ', <br>rok: ' + yearOfToday + ' <br>měsíc:' + monthOfToday + ' <br>den:' + dayOfToday); 
    //document.write('<br>rok: ' + today.getYear());
    
}
</script>

Moderátor Davex: Vkládej prosím kódy mezi značky [pre] a [/pre] (stačí kliknout na ).

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0