개발자 미니민의 개발스터디

[javascript] Date 객체

by mini_min
[javascript] Date 객체

✔️ Date 객체

: 날짜와 시간을 다루는데 사용되는 객체다! new 연산자를 사용하여 객체 타입을 만든다.

 

📓 생성자 및 정적 메소드

Date() : 현지 시간으로 생성 순간의 날짜와 시간을 나타내는 Date 객체를 생성한다.

Date.now() : 1970년 1월 1일 0시 0분 0초 부터 지난 시간을 밀리초 단위의 숫자 값으로 반환한다.

Date.parse(dateString) : 날짜의 문자열 표현을 분석하여 1970년 1월 1일 0시 0분 0초 이후 밀리 초로 반환한다.

.getFullYear() : 현지 시간 기준 연도(4글자)로 반환한다. 

.getMonth() : 날짜의 월을 나타내는 0에서 11 사이의 정수를 반환한다. 0은 1월 1은 2월

.getDate() : 주어진 날짜의 일에 해당하는 1이상 31이하 정수 반환

.getDay() : 0 이상 6이하 정수를 반환한다.

.getHours() : 기준 시에서 0에서 23 사이의 정수를 반환

.getMinutes() : 기준 분에서 0에서 23 사이의 정수를 반환

.getSeconds() : 기준 초에서 0에서 23 사이의 정수를 반환

.getTime() : 경과 시간을 나타내는 숫자를 밀리 초로 반환한다.

var now = new Date();
var y = now.getFullYear();
var m = now.getMonth() + 1; // getMonth() : 0~11
var d = now.getDate();
var w = now.getDay(); // 0(일) ~ 6(토)

var hr = now.getHours();
var mn = now.getMinutes();
var sc = now.getSeconds();


var ms = now.getTime(); // 1970-01-01 00:00:00 부터 경과시간. 단위 : ms

var s = y + '-' + m + '-' + d + '  ' + hr+':'+mn+':'+sc;
console.log(s, w);
console.log(ms);

 

 

✔️ Date 객체로 타이머 만들기

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<link rel="icon" href="data:;base64,iVBORw0KGgo=">

<style type="text/css">
.box {
	width: 250px;
	margin: 30px auto;
	text-align: center;
}

</style>

<script type="text/javascript">
function showClock() {
	let now = new Date();
	
          
	if(m < 10) m = "0" + m;
	if(d < 10) d = "0" + d;
		
	let hr = now.getHours();
	let mn = now.getMinutes();
	let sc = now.getSeconds();
	if(hr < 10) hr = "0" + hr;
	if(mn < 10) mn = "0" + mn;
	if(sc < 10) sc = "0" + sc;
	
	let s = y + '-' + m + '-' + d + ' ' + hr + ':' + mn + ':' + sc;
	
	document.querySelector('#nowDate').value = s;
	
	setTimeout("showClock()", 1000);
}

// showClock(); // <input type='text' ... 가 아래 있으므로 결과 나오지 않음

/* window.onload = function() {
	showClock();
}; */

window.onload = () => showClock();


</script>
</head>
<body>

<div class="box">
	<input type="text" id="nowDate" readonly="readonly">
</div>


</body>
</html>

 

 

.setDate(dayValue) : 현재 설정된 날짜에 지정된 월의 일자를 설정한다.

<script type="text/javascript">
var y, m, d, s;

//2022-09-31일로 Date 객체 생성
var date;

//2022-09-31 로 date 객체 생성 : 2022-10-01로 날짜가 설정됨
date = new Date(2022,9-1,31);
y = date.getFullYear();
m = date.getMonth() + 1; // getMonth() : 0~11
d = date.getDate();
s = y+"-"+m+"-"+d;
console.log(s);

date.setDate(50); // 일자를 50일로 설정.
y = date.getFullYear();
m = date.getMonth() + 1; // getMonth() : 0~11
d = date.getDate();
s = y+"-"+m+"-"+d;
console.log(s); // 2022-11-19
💡 date.setDate(50); 일자에 50일을 넣어서 설정한다. 2022-09-19 에서 50일자를 설정한다.

date = new Date(2022,9-1,31); : 9월 31일로 객체를 생성 ! => 10월 1일 날짜를 설정한다.

 

 

✔️ 마지막 일자 뽑기

//2022년 10월의 마지막 일자
y = 2022;
m = 10;
var lastDay = (new Date(y,m,0)).getDate();
console.log(lastDay);
💡 2022년 10월의 마지막 일자를 구하고 싶으면, (y, m, 0)
10월 0일로 작성해서 마지막 일자가 나온거다.

 

✔️ 전 달의 마지막 일자

y = 2022;
m = 10;
var lastDay = (new Date(y,m-1,0)).getDate();
console.log(lastDay);
💡 전 달이라서, m-1 하면 전 달이 된다.

 

✔️ 날짜 유효성 검사

//날짜 유효성 검사
function isValidDate(data) {
	if(data.length !== 8 && data.length !==10 ) return false;
	
	//replace 할 때는 g를 붙여야 안에 있는 모든 내용을 조사해서 변경한다.
	let p = /(\.)|(\-)|(\/)/g;
	
	data = data.replace(p, '');
	if(data.length !== 8) return false;
	
	p = /^[12][0-9]{3}[0-9]{2}[0-9]{2}$/;
	// p = /^[12][0-9]{7}$/;
	if(! p.test(data)) return false;
	
	let y = parseInt(data.substring(0,4));
	let m = parseInt(data.substring(4,6));
	//let m = parseInt(data.substring(4,2)); //4부터 시작해서 2개 반환
	let d = parseInt(data.substring(6)); // 6자리부터 끝까지
	
	if(m <1 || m > 12) {return false;}
	let lastDay = (new Date(y,m,0)).getDate(); // m월의 마지막 일자
	if(d < 1 || d > lastDay) {return false;}
	
	return true;
	
}
💡 p = /^[12][0-9]{7}$/;
💡 replace 할 때는 g를 붙여야 안에 있는 모든 내용을 조사해서 변경한다.
💡 substring 으로 문자열을 연도, 월, 일로 자른다.

 

 

✔️ 두 날짜 사이의 간격(일)

// 두 날짜 사이의 간격(일)
function toDiffDays(startDate, endDate) {
	let p = /(\.)|(\-)|(\/)/g;
	
	startDate = startDate.replace(p, '');
	endDate = endDate.replace(p, '');
	
	if(! isValidDate(startDate)){
		throw "날짜 형식이 올바르지 않습니다.";
	}
	
	if(! isValidDate(endDate)){
		throw "날짜 형식이 올바르지 않습니다.";
	}
	
	let sy = parseInt(startDate.substring(0,4));
	let sm = parseInt(startDate.substring(4,6));
	let sd = parseInt(startDate.substring(6));
	
	let ey = parseInt(endDate.substring(0,4));
	let em = parseInt(endDate.substring(4,6));
	let ed = parseInt(endDate.substring(6));
	
	let sdate = new Date(sy,sm-1,sd);
	let edate = new Date(ey,em-1,ed);

	let st = sdate.getTime();
	let et = edate.getTime();
	
	let dif = et - st;
	
	let day = Math.floor(dif/(24*60*60*1000));
	
	return day;
	//return day + 1 ; // 네이버 방식이다.
	
}
💡 startDate 와 endDate 에서 필요한 정보를 얻어낸다.

 

function result() {
	var startDate = document.querySelector("#startDate").value;
	var endDate = document.querySelector("#endDate").value;
	
	
	try {
		let n = toDiffDays(startDate, endDate);
		
		alert("차이(일): " + n);
		
	} catch (e) {
		document.querySelector("#startDate").focus();
		return;
	}

}

 

 

 

 

블로그의 정보

개발자 미니민의 개발로그

mini_min

활동하기