Prosím o pomoc s javascriptem

Vývojová prostředí, aplikace, skripty, http://www... síťové programy, internet, sdílení...
Odpovědět
Karmel
Nováček
Nováček
Registrován: 11. led 2011

Prosím o pomoc s javascriptem

Příspěvek 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>
Zivan
Začátečník
Začátečník
Registrován: 30. čer 2005
Bydliště: Brno
Kontaktovat uživatele:

Re: Prosím o pomoc s javascriptem

Příspěvek 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.
HP Elitebook 845 G8 (Ryzen 5650U, 32GB RAM, WD SN570 1TB, 14" fullHD IPS) + HP USB-C G5 Essential + 29" LG 29UM65 + 22" Eizo S2202W
Karmel
Nováček
Nováček
Registrován: 11. led 2011

Re: Prosím o pomoc s javascriptem

Příspěvek 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:
Odpovědět

Zpět na „Programování a web“