bom's happy life

[JS] 만 λ‚˜μ΄ κ³„μ‚°ν•˜κΈ° λ³Έλ¬Έ

Deveolpment StudyπŸ—‚οΈ/Javascript

[JS] 만 λ‚˜μ΄ κ³„μ‚°ν•˜κΈ°

bompeach 2023. 6. 21. 20:39

 μΈν’‹ν•„λ“œ 값이 변경될 λ•Œ ν•΄λ‹Ή ν•¨μˆ˜λ₯Ό μ‹€ν–‰μ‹œμΌœ 만 λ‚˜μ΄λ₯Ό κ³„μ‚°ν•˜λŠ” ν•¨μˆ˜λ§Œλ“€κΈ°   

 

 

1. HTML μš”μ†Œ κ°€μ Έμ˜€κΈ° : 

`nameBirthInput`, `childBirthInput`, `nameAgeInput`, `childAgeInput `λ³€μˆ˜λ“€μ€ 각각 HTML μš”μ†Œλ₯Ό κ°€μ Έμ˜€λŠ” getElementById ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ ν•΄λ‹Ή 인풋 ν•„λ“œλ“€μ„ μ„ νƒν•œλ‹€. `name_birth_val`은 μ‹ μ²­μž 생년월일을 μž…λ ₯ν•˜λŠ” 인풋 ν•„λ“œ, `child_birth_val`은 μžλ…€ 생년월일을 μž…λ ₯ν•˜λŠ” 인풋 ν•„λ“œ, `name_age_val`은 μ‹ μ²­μžμ˜ 만 λ‚˜μ΄λ₯Ό ν‘œμ‹œν•˜λŠ” 인풋 ν•„λ“œ, `child_age_val`은 μžλ…€μ˜ 만 λ‚˜μ΄λ₯Ό ν‘œμ‹œν•˜λŠ” 인풋 ν•„λ“œλ₯Ό 가리킨닀.

 

2. 만 λ‚˜μ΄ 계산 ν•¨μˆ˜(`calculateAge`) : 

- calculateAge ν•¨μˆ˜λŠ” 인풋 ν•„λ“œμ˜ 값을 기반으둜 만 λ‚˜μ΄λ₯Ό κ³„μ‚°ν•˜κ³  ν•΄λ‹Ή 값을 인풋 ν•„λ“œμ— μ„€μ •ν•˜λŠ” 역할을 ν•œλ‹€.

- currentDate λ³€μˆ˜μ—λŠ” ν˜„μž¬ λ‚ μ§œλ₯Ό μ €μž₯ν•œλ‹€.

- inputDate λ³€μˆ˜μ—λŠ” 인풋 ν•„λ“œμ˜ 값인 생년월일을 Date 객체둜 λ³€ν™˜ν•˜μ—¬ μ €μž₯ν•œλ‹€.

- age λ³€μˆ˜μ—λŠ” ν˜„μž¬ μ—°λ„μ—μ„œ 생년월일 연도λ₯Ό λΉΌμ„œ μ΄ˆκΈ°κ°’μœΌλ‘œ μ„€μ •ν•œλ‹€.

- λ§Œμ•½ ν˜„μž¬ 월이 생년월일 월보닀 μž‘κ±°λ‚˜, ν˜„μž¬ 월이 생년월일 μ›”κ³Ό κ°™μ§€λ§Œ ν˜„μž¬ 일이 생년월일 일보닀 μž‘μ€ 경우, λ‚˜μ΄λ₯Ό 1 λΉΌμ€€λ‹€. μ΄λŠ” 생년월일이 아직 λ„λž˜ν•˜μ§€ μ•Šμ€ κ²½μš°μ—λŠ” ν•œ 살을 λΉΌμ•Ό ν•˜κΈ° λ•Œλ¬Έ.

- λ§ˆμ§€λ§‰μœΌλ‘œ ageInput에 κ³„μ‚°λœ 만 λ‚˜μ΄λ₯Ό λ¬Έμžμ—΄λ‘œ μ„€μ •ν•˜μ—¬ ν•΄λ‹Ή 인풋 ν•„λ“œμ— ν‘œμ‹œν•œλ‹€.

 

3. μΈν’‹ν•„λ“œ κ°’ λ³€κ²½ μ‹œ 이벀트 λ¦¬μŠ€λ„ˆ 등둝 : 

`nameBirthInput`κ³Ό `childBirthInput` 인풋 ν•„λ“œμ˜ 값이 변경될 λ•Œ calculateAge ν•¨μˆ˜λ₯Ό μ‹€ν–‰ν•˜λŠ” 이벀트 λ¦¬μŠ€λ„ˆλ₯Ό λ“±λ‘ν•œλ‹€. 이λ₯Ό 톡해 생년월일이 λ³€κ²½λ˜λ©΄ ν•΄λ‹Ήν•˜λŠ” 만 λ‚˜μ΄κ°€ μžλ™μœΌλ‘œ κ³„μ‚°λ˜μ–΄ ν‘œμ‹œλ‹€.

 

.

.

.

 

JSP

<table>
	<tbody>
    	<tr>
        	<th>μ‹ μ²­μž 생년월일</th>
            <td>
            	<input id="name_birth_val" type="date">
                만 <input id="name_age_val" type="text"> μ„Έ
            </td>
        </tr>
        
        <tr>
        	<th>μžλ…€ 생년월일</th>
            <td>
            	<input id="child_birth_val" type="date">
                만 <input id="child_age_val" type="text"> μ„Έ
            </td>
        </tr>
    </tbody>
</table>

 

 

Javascript

<script  type="text/javascript">
		/* 만 λ‚˜μ΄ κ³„μ‚°ν•˜κΈ° */
		
		// HTML μš”μ†Œ κ°€μ Έμ˜€κΈ°
		const nameBirthInput = document.getElementById('name_birth_val');  //date인풋
		const childBirthInput = document.getElementById('child_birth_val');
		const nameAgeInput = document.getElementById('name_age_val');  //만 λ‚˜μ΄ 인풋
		const childAgeInput = document.getElementById('child_age_val');
		
		// 만 λ‚˜μ΄ 계산 ν•¨μˆ˜
		function calculateAge(input, ageInput) {
		  const currentDate = new Date();
		  const inputDate = new Date(input.value);
		  
		  var age = currentDate.getFullYear() - inputDate.getFullYear();
		
		  if (
		    currentDate.getMonth() < inputDate.getMonth() ||
		    (currentDate.getMonth() === inputDate.getMonth() &&
		      currentDate.getDate() < inputDate.getDate())
		  ) {
		    age--;
		  }
		
		  // 만 λ‚˜μ΄ ν…μŠ€νŠΈλ‘œ λ³€ν™˜
		  ageInput.value = age.toString();
		}
		
		// 인풋 ν•„λ“œμ˜ 값이 변경될 λ•Œ calculateAge ν•¨μˆ˜ μ‹€ν–‰
		nameBirthInput.addEventListener('input', function() {
		  calculateAge(nameBirthInput, nameAgeInput);
		});
		
		childBirthInput.addEventListener('input', function() {
		  calculateAge(childBirthInput, childAgeInput);
		});
  </script>