HTML5 input type="date"의 브라우저 호환성 문제 해결
문제 상황
예약 시스템의 날짜 선택 기능을 <input type="date">로 구현했는데, Chrome에서는 잘 동작하지만 Safari와 IE11에서는 단순 텍스트 입력창으로 표시되는 문제가 발생했다.
브라우저 지원 현황
2017년 3월 기준으로 date input 지원 현황은 다음과 같다.
- Chrome 20+: 완벽 지원
- Firefox 57+: 미지원 (올해 말 지원 예정)
- Safari: 미지원
- IE: 미지원
- Edge: 부분 지원
해결 방법
1. Feature Detection
먼저 브라우저가 date input을 지원하는지 체크했다.
function isDateInputSupported() {
var input = document.createElement('input');
input.setAttribute('type', 'date');
return input.type === 'date';
}
2. Polyfill 적용
지원하지 않는 브라우저에는 Pikaday 라이브러리를 사용해 대체했다.
<input type="date" id="reservation-date" class="date-input">
<script>
if (!isDateInputSupported()) {
var picker = new Pikaday({
field: document.getElementById('reservation-date'),
format: 'YYYY-MM-DD',
yearRange: [2017, 2020]
});
}
</script>
3. 서버 사이드 검증
클라이언트에서 포맷이 달라질 수 있으므로 서버에서도 반드시 날짜 형식을 검증하도록 수정했다.
// Express.js
app.post('/reservation', (req, res) => {
const datePattern = /^\d{4}-\d{2}-\d{2}$/;
if (!datePattern.test(req.body.date)) {
return res.status(400).json({ error: 'Invalid date format' });
}
// ...
});
결론
HTML5의 새로운 input type들은 편리하지만 아직 브라우저 지원이 완벽하지 않다. 프로덕션에서는 항상 폴백을 준비해야 한다. 당분간은 date picker 라이브러리를 직접 사용하는 것이 더 안전할 것 같다.