본문 바로가기
코딩&AI프로젝트

날짜 선택 시 자동으로 값을 조정하는 스마트 웹 입력폼 만들기

by mywarmstory 2025. 1. 3.

 

웹 개발을 하다 보면 종종 두 날짜 입력 간의 관계를 동적으로 제어해야 할 때가 있다. 예를 들어, 사용자가 출고일(workday)을 선택하면 납기일(deadline)이 출고일 이전 날짜로 설정되지 않도록 자동으로 수정해 주는 기능이 필요할 수 있다. 이런 기능은 사용자가 실수로 잘못된 날짜를 입력하는 것을 방지하고, 데이터를 더 정확히 관리할 수 있도록 돕는다.

오늘은 이런 상황을 해결하기 위해 간단한 JavaScript와 jQuery를 사용하여 날짜 필드 간의 상호작용을 동적으로 처리하는 방법을 알아본다.


요구사항 이해하기

우리가 처리할 상황은 다음과 같다:

  • 두 개의 날짜 필드, 출고일(workday)과 납기일(deadline)이 있다.
  • 사용자가 출고일(workday)을 선택하면:
    • 납기일(deadline)이 출고일(workday) 이전의 날짜라면, 이를 출고일(workday)과 동일한 날짜로 자동 수정해야 한다.
    • 사용자는 아무런 불편 없이 자연스럽게 날짜가 조정되는 것을 경험해야 한다.

이를 구현하기 위해 HTML 입력 필드와 JavaScript로 동작을 제어하는 코드를 작성할 것이다.


HTML 구조 만들기

우선 HTML에서 두 날짜 필드를 생성한다. 각 필드에는 고유한 id를 부여하여 JavaScript가 이를 제어할 수 있도록 한다.

<table>
  <tr>
    <td style="color:blue;">출고일</td>
    <td>
      <input type="date" name="workday" id="workday" class="form-control" />
    </td>
    <td style="color:red;">납기일</td>
    <td>
      <input type="date" name="deadline" id="deadline" class="form-control" />
    </td>
  </tr>
</table>

위의 코드에서는 출고일(workday)과 납기일(deadline) 두 필드를 테이블 형태로 배치했다. 간단하고 가독성 높은 UI로 사용자가 쉽게 이해할 수 있다.


JavaScript로 동작 구현하기

이제 출고일(workday)의 값이 변경될 때 납기일(deadline)을 자동으로 조정하는 JavaScript 코드를 작성해 보자.

$(document).ready(function () {
    $('#workday').on('change', function () {
        var workdayValue = $(this).val(); // workday의 선택된 날짜
        var deadlineValue = $('#deadline').val(); // deadline의 현재 날짜

        if (workdayValue) {
            // workday와 deadline 값을 Date 객체로 변환
            var workdayDate = new Date(workdayValue);
            var deadlineDate = new Date(deadlineValue);

            // deadline이 workday 이전 날짜인지 확인
            if (deadlineValue && deadlineDate < workdayDate) {
                // deadline을 workday와 같은 날짜로 수정
                $('#deadline').val(workdayValue);
                alert('납기일이 출고일 이전 날짜이므로 출고일과 동일하게 변경되었습니다.');
            }
        }
    });
});

코드 분석

1. change 이벤트 감지

#workday 필드에서 날짜가 선택될 때마다 change 이벤트가 발생한다. 이를 감지하여 이벤트 핸들러가 실행된다.

2. 입력 값 가져오기

workday와 deadline의 값을 각각 val() 메서드를 통해 가져온다. 이 값들은 문자열 형태의 날짜이다.

3. 날짜 비교

가져온 문자열 값을 Date 객체로 변환한 뒤, 두 날짜를 비교한다. deadline이 workday보다 빠른 경우, deadline 값을 workday와 동일하게 수정한다.

4. 사용자 알림

날짜가 자동으로 수정되었음을 사용자가 알 수 있도록 alert 메시지를 표시한다. 이를 통해 수정이 이루어졌음을 즉각적으로 알 수 있다.


동작 확인

위의 코드를 적용하면, 사용자가 출고일(workday)을 변경했을 때 납기일(deadline)이 자연스럽게 업데이트된다. 특히, 납기일이 출고일보다 앞선 경우, 잘못된 입력을 방지하기 위해 출고일과 동일한 날짜로 자동 변경된다.

이를 통해 사용자는 잘못된 데이터를 입력하는 불편을 겪지 않으며, 개발자는 데이터의 무결성을 쉽게 유지할 수 있다.


더 나아가기

이 코드는 기본적인 기능을 제공하지만, 상황에 따라 추가적인 개선이 가능하다. 예를 들어:

  • 사용자 경험 개선: alert 대신 UI 상에서 메시지를 보여주는 방식으로 더 부드러운 경험을 제공할 수 있다.
  • 다양한 입력 필드와의 연계: 다른 날짜 필드(예: 발주일, 접수일)와도 유사한 로직을 적용하여 전반적인 날짜 입력 관리를 자동화할 수 있다.

이처럼 작은 기능 하나라도 잘 설계하고 구현하면 사용자에게 큰 만족감을 줄 수 있다. 오늘 다룬 날짜 입력 관리 로직은 다양한 웹 애플리케이션에서 유용하게 활용될 수 있는 기본적인 스킬이다.

반응형