본문 바로가기
개발/javascript

[javascript] 날짜, 시간, 요일, 시계

by 가시죠 2021. 1. 18.
반응형

Data 객체를 이용한 날짜 가져오기

getFullYear() 연도
getMonth() 월 (0부터 시작, 0 - 1월, 1 - 2월, ... 11 - 12월)
getDate() 일 
getHours() 시간 (0 ~ 23, 24시간 기준, 밤 10시는 22)
getMinutes() 분 (0 ~ 59)
getSeconds() 초 (0 ~ 59)
getMilliseconds() 밀리초
getDay() 요일 (0 ~ 6, 0:일요일 ~ 6:토요일)
getLocaleString() ex) 2020.12.29. 오후 10:24:23
toLocaleDateString() ex) 2020.12.29.
toLocaleTimeString() ex) 오후 10:24:23

PS. setXXX 메소드를 사용하여 날짜를 지정할 수 있다. ex) 년도 지정 setFullYear(2011)   // 2011년으로 세팅

 

예제

// 데이터 객체 생성
const date = new Date();

// 날짜, 시간, 요일 함수를 이용해 변수에 담기
const year = date.getFullYear();
const month = date.getMonth()+1;
const day = date.getDate();
const hour = date.getHours();
const minutes = date.getMinutes();
const seconds = date.getSeconds();
const week = date.getDay();
const weekList = ['일', '월', '화', '수', '목', '금', '토'];

// 현재 시간 변수에 담기
const label = `지금은 ${year}년 ${month}월 ${day}일 ${weekList[week]}요일 ${hour}시 ${minutes}분 ${seconds}초 입니다.`;

// 콘솔로 출력
console.log(label);

// 현재 시간과 날씨 가져오기
const locale = date.toLocaleString();  // 2020.12.29. 오후 10:24:23
const localeDate = date.toLocaleDateString(); // 2020.12.29.
const localeTime = date.toLocaleTimeString(); // 오후 10:24:23

// 콘솔로 출력
console.log(locale);
console.log(localeDate);
console.log(localeTime);

날짜 계산하기

몇개월전, 몇일후의 날짜를 구할 수 있다.

예제

// 2020년 1월 1일로 날짜 객체 생성
const date = new Date('2020/05/01');

date.setMonth(date.getMonth() -1);  // 1개월전
console.log(date.toLocaleDateString()); // 결과: 2020.04.01

date.setDate(date.getDate() + 60);  // 60일 후
console.log(date.toLocaleDateString());  // 결과: 2020. 6. 30.

날짜 차이 구하기

두 날짜의 차이를 구하고 싶을 경우

예제

const dateA = new Date('2020/06/01');
const dateB = new Date('2020/05/01');

const diffMSec = dateA.getTime() - dateB.getTime();

// 일수 차이 (24*60*60*1000)
// 시간 차이 (60*60*1000)
// 분 차이 (60*1000)
const diffDate = diffMSec / (24*60*60*1000);

console.log(`날짜의 차이는 ${diffDate}일 ); // 날짜의 차이는 31일

카운트 다운

제한 시간을 설정하여 카운트다운 하기

예제

const totalTime = 10000; // 10초
const oldTime = Date.now();

// 1초에 한번 실행되는 타이머
const timer = setInterval(() => {
    const currTime = Date.now();
    const diff = currTime - oldTime;

    const remainMSec = totalTime - diff;

    const remainSec = Math.ceil(remainMSec/1000);
    
    let label = `남은시간 ${remainSec}`;

    // 0초 이하일 경우 타이머 종료
    if(remainSec <= 0) {
        clearInterval(timer);
    }

    // 화면 표시 예시
    document.querySelector('#log').innerHTML = label;
    // 콘솔 표시 예시
    console.log(label);
}, 1000);

아날로그시계 만들기

아날로그 시계 만들기

사용하는 파일 clock.html, clock.css, clock.js

 

예제 (clock.html)

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>clock</title>
    <link rel="stylesheet" href="clock.css">
    <script src="clock.js"></script>
</head>
<body>
    <div class="clock">
        <div class="num3">3</div>
        <div class="num6">6</div>
        <div class="num9">9</div>
        <div class="num12">12</div>
        <div class="dot"></div>
        <div class="lineHour"></div>
        <div class="lineMin"></div>
        <div class="lineSec"></div>
    </div>
</body>
</html>

예제 (clock.css)

body {
    background-color: burlywood;
}
.clock {
    border-radius: 50%;
    border: 3px solid black;
    border-width: 5px;
    width: 400px;
    height: 400px;
    background: white;
    position: relative;
    vertical-align: middle;
}

.num3 {
    top: calc(50% - 20px);
    left:calc(100% - 30px);
    position: absolute;
    font-size: 34px;
}

.num6 {
    top: calc(100% - 40px);
    left:calc(50% - 5px);
    position: absolute;
    font-size: 34px;
}

.num9 {
    top: calc(50% - 20px);
    left:calc(10px);
    position: absolute;
    font-size: 34px;
}

.num12 {
    top: 5px;
    left:calc(50% - 14px);
    position: absolute;
    font-size: 34px;
}

.dot {
    border-radius: 50%;
    width: 5px;
    height: 5px;
    border: 3px solid black;
    background-color: black;
    position: absolute;
    top:calc(50% - 5px);
    left:calc(50% - 5px);
    transform-origin: bottom;
    z-index: 10;
}

.lineHour {
    width: 10px;
    height: 110px;
    background: black;
    position: absolute;
    top: calc(50% - 110px);
    left: calc(50% - 5px);
    transform-origin: bottom;
    border-radius: 100%
}

.lineMin {
    width: 4px;
    height: 160px;
    background: black;
    position: absolute;
    top: calc(50% - 160px);
    left: calc(50% - 2px);
    transform-origin: bottom;
    border-radius: 100%
}

.lineSec {
    width: 2px;
    height: 130px;
    background: red;
    position: absolute;
    top: calc(50% - 130px);
    left: calc(50% - 1px);
    transform-origin: bottom;
    border-radius: 100%
}

예제 (clock.js)

// 1초에 한번 호출되는 타이머
setInterval(()=>{
    const now = new Date();

    const h = now.getHours(); // 시간 (0~23)
    const m = now.getMinutes(); // 분 (0~59)
    const s = now.getSeconds(); // 초 (0~59)

    // 시계 바늘 각도
    const degH = h * (360/12) + m * (360/12/60);
    const degM = m * (360/60);
    const degS = s * (360/60);

    // div를 가져와서
    const elementH = document.querySelector('.lineHour');
    const elementM = document.querySelector('.lineMin');
    const elementS = document.querySelector('.lineSec');

    // 각도 조절
    elementH.style.transform = `rotate(${degH}deg)`;
    elementM.style.transform = `rotate(${degM}deg)`;
    elementS.style.transform = `rotate(${degS}deg)`;
},1000);

 

반응형

댓글