Stránka 1 z 1

Prosím o pomoc s javascriptem

Napsal: úte 11. led 2011, 12:42
od Karmel
Prosím o pomoc s následujícím skriptem. Skript počítá věk ve formátu roky, měsíce a dny. Všechno fungovalo v pořádku do doby, než přišel rok 2011. V tomto konkrétním případě se dítě narodilo 9.5.2010. 9.1.2011 tedy dosáhlo věku rovných 8 měsíců. Musela jsem však upravit jeden řádek a přičíst tam +1 měsíc, jinak to ukazovalo, že je dítěti 7 měsíců. Viz řádek var monthOfToday = today.getMonth() + 1; //chyba
Ale když si v PC přenastavím datum na 1.2.2011, ukazuje mi to, že je dítěti 9 měsíců a 23 dní a mělo by být 8 měsíců a 23 dní. Takže 1.2.2011 bych musela zase stejný řádek upravit a měsíc nepřičíst. Vzhledem k tomu, že takto vedu asi 50 dětí, tak bych musela vždy v den jejich celého měsíce, měsíc přičíst a při počátku nového měsíce to zase smazat. Vůbec v kódu ale tu chybu nevidím. Pomozte prosím.
Zde je ten kód:

Kód: Vybrat vše

<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>

Re: Prosím o pomoc s javascriptem

Napsal: úte 11. led 2011, 13:12
od Zivan
V kodu dobre resis zmenu mesicu napr. z prosince do ledna (odectes rok a spocitas mesice), ale je tam blbe stejny prechod dnu. Nechas mesic navic a pak jeste spatne spocitas dny.

Re: Prosím o pomoc s javascriptem

Napsal: úte 11. led 2011, 18:10
od Karmel
Děkuji za odpověď, ale stejně nevím, jak to opravit, nemohl bys mi do toho sáhnout a opravit mi to. Nebo mě víc navést. Jsem začátečník a fakt se momentálně nechytám. :sad: