javascript/실습

[JS] 바닐라JS 날짜 계산하기

늦깍이 2022. 9. 8. 09:12
해당 글은 노마드 코더의 '바닐라JS' 챌린지의 내용 정리입니다.

     실행 화면

      주의했던 점

  • Seconds 부분과 Minutes 부분은 00분 00초의 형태가 되도록 한다. (ex. 6분 6초면 06분 06초 남았습니다. 와 같은 형식으로...)

        HTML code

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="clockDiv">
        <h1 id="clockText">Time Until Christmas Eve</h1>
        <h2 id="clock">clock</h2>
    </div>
    
    <script src="clockapp.js"></script>
</body>
</html>

        헤맨 부분

  • div와 h1, h2를 id가 아닌 class로 하니 이상하게 querySelector로 불러와서 style을 지정하는게 되질 않았다.

        해결 과정에서 얻은 지식

  • div의 배치
  • querySelector가 아닌 getElementById로 class가 아닌 id를 사용하니 훨씬 수월해졌다. 이후 코드로 살펴보자.

        JavaScript[JS]

const clock = document.getElementById("clock");
const clockText = document.getElementById("clockText");
const clockDiv = document.getElementById("clockDiv");
clockText.style.fontSize = "60px";
clock.style.fontSize = "45px";
clockDiv.style.position = "absolute";
clockDiv.style.top = "40%";
clockDiv.style.left = "20%";

function getClock(){
    const date = new Date();
    const year = String(date.getFullYear());
    const a = year + "-" + "12-25";
    const Cdate = new Date(a);
    const Ctime = Cdate.getTime();
    const Dtime = date.getTime();
    let time = Math.floor((Ctime - Dtime) / 1000);
    const dates = Math.floor(Math.abs(time / (60*60*24)));
    time = time - dates * (60*60*24);
    const hours = Math.floor(Math.abs(time / (60*60)));
    time = time - hours * (60 * 60);
    const minutes = String(Math.floor(Math.abs(time / (60)))).padStart(2,"0");
    time = time - minutes * 60;
    const seconds = String(Math.floor(Math.abs(time))).padStart(2,"0");
    
    clock.innerText = `${dates}일 ${hours}시간 ${minutes}분 ${seconds}초 남았습니다.`;
}
getClock();
setInterval(getClock, 1000);

        헤맨 부분

  • 날짜를 계산하는 것.
  • querySelector와 getElementById의 차이

        해결 과정에서 얻은 지식

  • 날짜 
    getTime() 1970년 1월 1일을 기준으로 현재까지의 시간을 milliseconds의 단위로 가져옴
    const date = new Date("원하는 날짜"); 생성할 때, 원하는 날짜를 넣지 않으면 default로 현재의 날짜를 가져오지만, 원하는 날짜가 있을 땐 생성할 때, 저런 식으로 넣어주면 된다.
    두 날짜의 차이를 구하는 방식
    -먼저, 원하는 날짜 둘을 date1, date2로 생성을 하고, getTime()으로 시간을 구해 빼준다.
    -뺀 시간을 년, 날, 시, 분, 초의 단위로 나누면 되는데, 나누는 방법은 1000(밀리초) * 60(초) * 60(분) * 24(시간) * 365(년)이다.
    초를 원한다면 1000 * 60
    분을 원한다면 1000 * 60 * 60
    시간을 원한다면 1000 * 60 * 60 * 24
    년을 원한다면 1000 * 60 * 60 * 24 * 365
  • id와 class의 차이
    id는 특정한 대상만을 가르키는 반면, class는 재사용이 가능하다.
  • getElementById("id").style.*를 통해 css에서 할 수 있는 것들을 js에서도 할 수 있게 해준다.
  • setInterval(funtion, num(ms)) 와 setTimeout(function, num(ms))의 차이를 안다.

        앞으로 해결해야할 의문

  • querySelector 와 getElementById의 차이를 조금 더 명확하게 알도록 하자.

'javascript > 실습' 카테고리의 다른 글

[JS] 바닐라JS Random Number Game  (0) 2022.09.07