자바스크립트에서 날짜 관련 핸들링은 항상 어렵다.

 

월단위로 데이터를 검색하는 경우 검색 조건 통제를 위한 자바스크립트로 월단위를 더하는 방식을 알아본다.

 

// 한자리면 0붙이기

function pad(n) {

    return n < 10 ? '0'+n : ''+n

}

// 월 더하기
function addMonth(d, n) {
    d.setMonth(d.getMonth() + n);
    return d.getFullYear() + '/' + pad(d.getMonth()+1) + '/' + pad(d.getDate());    
}

// 실행

console.log(addMonth(new Date('2022/01/01'), 1)); // '2022/02/01'

console.log(addMonth(new Date('2022/01/15'), 1)); // '2022/02/15'

console.log(addMonth(new Date('2022/01/31'), 1)); // '2022/03/03' ??????????????

 

이는 자바스크립트에서 setMonth 함수로 월을 셋팅하면 일은 그대로고 월만 변경 되기 때문에

2022/02/31 이 된다. 2월은 28일 까지 있으므로 자바스크립트 자체에서 2월28일에서 3일을 더해 3월3일이 되는 것이다.

이에 대한 예외 처리를 해줘야 한다.

// 1자리면 0 붙이기

function pad(n) {
    return n < 10 ? '0'+n : ''+n
}

// 윤년인지여부
function isLeapYear(year) {
    return (((year % 4 === 0) && (year % 100 !== 0)) || (year % 400 === 0)); 
}

// 해당년월의 말일 구하기
function getLastDate(year, month) {
    return [31, (isLeapYear(year) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31][month];
}

// 월 더하기
function addMonth(d, n) {
    var date = d.getDate();
    d.setDate(1); // 1일로 설정
    d.setMonth(d.getMonth() + n); // 개월수 더하기
    //d.setDate(d.getDate() - 1); 
    return d.getFullYear() + '/' + pad(d.getMonth()+1) + '/' + pad(Math.min(date, getLastDate(d.getYear(), d.getMonth())));    
}
// 실행
console.log(addMonth(new Date('2022/01/01'), 1)); // '2022/02/01'
console.log(addMonth(new Date('2022/01/15'), 1)); // '2022/02/15'

console.log(addMonth(new Date('2022/01/31'), 1)); // '2022/02/28'

제대로 나오는거 같다.

java나 jsp파일에서 날짜를 형식대로 출력하는 소스입니다.


<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

<%@page import="java.util.Date" %>

<%@page import="java.text.SimpleDateFormat" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" lang="ko" xml:lang="ko">

<head>

<title>TIME</title>

</head>

<body>

<%

Date now = new Date();

%>

<%=now %><br>

<%

SimpleDateFormat sf = new SimpleDateFormat("yyyyMMddHHmmss");

String today = sf.format(now);

%>

<%=today %><br>

<%

sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

today = sf.format(now);

%>

<%=today %><br>

<%

sf = new SimpleDateFormat("yyyy년MM월dd일 E요일 a hh:mm:ss");

today = sf.format(now);

%>

<%=today %><br>

</body>

</html>

+ Recent posts