본문 바로가기
Front-end/Vanilla JS

Vanilla JS - 시계 만들기

by devraphy 2020. 10. 10.

1. Date() 객체 생성 

- Date는 시간정보를 담고있는 클래스다. 이를 이용해서 시간정보를 갖는 객체를 생성할 수 있다.

const date = new Date(); // 시간정보를 담고있는 객체를 생성 

 

- Date 클래스를 이용하면 해당 클래스가 갖고있는 메소드를 이용해서 다양한 정보를 알아낼 수 있다. 

console.log(date); // 현재 시간정보를 출력 
console.log(date.getDay()); // 1 = 월요일 
console.log(date.getDate()); // 일자를 가져옴
console.log(date.getHours()); // 시간
console.log(date.getMinutes()); // 분
console.log(date.getSeconds()); // 초 

 

- date객체를 통해 알아낸 정보들을 변수를 할당하여 각각의 변수에 저장해준다. 

- 기본 코드는 다음과 같다. 

 

[기본 HTML] 

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Vanilla JS</title>
    <link rel="stylesheet" href="index.css" />
  </head>
  <body>
    <div class="js-clock">
      <h1>00:00</h1>
    </div>
    <!-- Script 태그는 Body태그의 가장 마지막에 위치한다. -->
    <script src="index.js"></script>
    <script src="clock.js"></script>
  </body>
</html>

 

 

[JS 코드]

const clockContainer = document.querySelector(".js-clock"),
    clockTitle = clockContainer.querySelector("h1");

function getTime() {
    const date = new Date(); // 시간정보를 담고있는 객체를 생성 
    const minutes = date.getMinutes();
    const hours = date.getHours();
    const seconds = date.getSeconds();
    clockTitle.innerText = `${hours}:${minutes}:${seconds}`;
}

function init() {
    getTime();
}

init();

 

 

[출력화면]

- 위의 사진처럼, 시간이 잘 출력되는 것을 볼 수 있다. 하지만, 시간이 자동으로 흐르지 않아 매번 새로고침을 해야하는 문제점이 있다. 어떻게 하면 1초마다 시간이 업데이트 되도록 할 수 있을까? 


2. setInterval()

- setInterval(함수, 시간): 매개변수로 들어가는 함수를 얼마 만큼의 시간 간격(ms)을 두고 호출할 것인지 설정하는 함수.

 

ex) sayHi() 함수를 3초의 간격을 두고 호출 / 3초 = 3000ms 

function sayHi() {
  console.log("Hi")
}

setInterval(sayHi, 3000)

 

- 그럼 setInterval() 함수를 이용하여 시간이 1초마다 업데이트 되도록 만들어보자.

 

 

[JS 코드]

const clockContainer = document.querySelector(".js-clock"),
    clockTitle = clockContainer.querySelector("h1");

function getTime() {
    const date = new Date(); // 시간정보를 담고있는 객체를 생성 
    const minutes = date.getMinutes();
    const hours = date.getHours();
    const seconds = date.getSeconds();
    clockTitle.innerText = `${hours}:${minutes}:${seconds}`;
}

function init() {
    setInterval(getTime, 1000);
}

init();

 

 

[출력화면]

- 출력 화면을 확인하니 한가지 문제점을 찾을 수 있었다. 59초 다음에 0초가 되었을때, 00초가 아니라 0초로 1자리로 표현되는 것이다. 어떻게 고칠 수 있을까? 

 


3. 삼항연산자(Ternary Operator) 

- 삼항연산자는 간단한 if문을 기호로 작성하는 표현법을 의미한다. 

- 삼항연산자는 1개의 조건을 기반으로 A or B의 연산을 하게 된다.

- 표현법은 다음과 같다.

 

ex) 만약 A가 어떤 조건보다 작다면, A이고 아니면 B 라는 조건문을 삼항연산자로 작성한다면 아래와 같이 표현할 수 있다. 

답) A < 조건 ? A : B 

 

- 이 삼항연산자를 이용해서 간단하게 위에서 발견한 00초가 아니라 0초로 시간이 출력되는 문제점을 고쳐보자. 

 

[JS 코드] 

const clockContainer = document.querySelector(".js-clock"),
    clockTitle = clockContainer.querySelector("h1");

function getTime() {
    const date = new Date(); // 시간정보를 담고있는 객체를 생성 
    const minutes = date.getMinutes();
    const hours = date.getHours();
    const seconds = date.getSeconds();
    clockTitle.innerText = `${hours < 10 ?
        `0${hours}` : hours}:${minutes < 10 ?
            `0${minutes}` : minutes}:${seconds < 10 ? `0${seconds}` : seconds}`;

}


function init() {
    setInterval(getTime, 1000);
}

init();

 

 

[출력화면] 

 

댓글