[Java Web programming] [Spring Boot + Vue.js] 게시판 만들기 - 날짜, 시간, 날씨

이번 포스팅에서는 다양한 곳에서 사용하기 위해 만든 공통 컴포넌트 중 상단바에서 사용되는 날짜, 시간, 날씨 컴포넌트를 알아보자

날짜, 시간 컴포넌트

현재 날짜와 시간을 표시해주는 컴포넌트로 JavaScript의 Date 객체를 이용하여 구현

 

구현

 
 
<template>
 
<div id="clock">
 
<v-icon small>mdi-calendar</v-icon> {{ date }}
 
<br />
 
<v-icon small>mdi-clock-outline</v-icon> {{ time }}
 
</div>
 
</template>
 
 
 
<script>
 
export default {
 
data() {
 
return {
 
week: ['SUN', 'MON', 'TUE', 'WED', 'THU', 'FRI', 'SAT'],
 
time: '',
 
date: '',
 
}
 
},
 
mounted() {
 
setInterval(this.updateTime, 1000) // 1초마다 시간 갱신
 
},
 
methods: {
 
updateTime() {
 
var cd = new Date()
 
// 날짜 출력
 
this.date =
 
this.zeroPadding(cd.getFullYear(), 4) +
 
'/' +
 
this.zeroPadding(cd.getMonth() + 1, 2) +
 
'/' +
 
this.zeroPadding(cd.getDate(), 2) +
 
' ' +
 
this.week[cd.getDay()]
 
// 시간 출력
 
this.time =
 
this.zeroPadding(cd.getHours(), 2) +
 
':' +
 
this.zeroPadding(cd.getMinutes(), 2) +
 
':' +
 
this.zeroPadding(cd.getSeconds(), 2)
 
},
 
zeroPadding(num, digit) {
 
var zero = ''
 
for (var i = 0; i < digit; i++) {
 
zero += '0'
 
}
 
return (zero + num).slice(-digit)
 
},
 
},
 
}
 
</script>
 
 
 
<style scoped>
 
#clock {
 
font-size: 0.875rem;
 
font-weight: 500;
 
}
 
</style>
  • zeroPadding 함수는 인수로 숫자와 자릿수를 전달하여 해당 자릿수를 만들기 위해 빈 곳에 0을 추가하는 함수이다.

동작 확인

 

 

 

날씨 컴포넌트

특정 지역의 날씨정보를 표시하는 기능으로 OpenWeatherMap API를 이용하여 구현

경축! 아무것도 안하여 에스천사게임즈가 새로운 모습으로 재오픈 하였습니다.
어린이용이며, 설치가 필요없는 브라우저 게임입니다.
https://s1004games.com

 

구현

 
 
<template>
 
<div id="weather">
 
<!-- 날씨 정보가 있을 경우 -->
 
<div v-if="typeof weather.main != 'undefined'">
 
<div :title="weather.weather[0].main">
 
<!-- Clear -->
 
<v-icon v-if="code == 800">{{ icons[5] }}</v-icon>
 
<!-- Thunderstorm -->
 
<v-icon v-else-if="code.substr(0, 1) == 2">
 
{{ icons[0] }}
 
</v-icon>
 
<!-- Drizzle -->
 
<v-icon v-else-if="code.substr(0, 1) == 3">
 
{{ icons[1] }}
 
</v-icon>
 
<!-- Rain -->
 
<v-icon v-else-if="code.substr(0, 1) == 5">
 
{{ icons[2] }}
 
</v-icon>
 
<!-- Snow -->
 
<v-icon v-else-if="code.substr(0, 1) == 6">
 
{{ icons[3] }}
 
</v-icon>
 
<!-- Atmosphere -->
 
<v-icon v-else-if="code.substr(0, 1) == 7">
 
{{ icons[4] }}
 
</v-icon>
 
<!-- Clouds -->
 
<v-icon v-else>
 
{{ icons[6] }}
 
</v-icon>
 
</div>
 
<div>{{ Math.round(temp) }}℃</div>
 
</div>
 
<!-- 날씨 정보가 없을 경우 -->
 
<div v-else>
 
<div>
 
<v-icon>mdi-cancel</v-icon>
 
</div>
 
<div>
 
{{ weather.cod }}
 
</div>
 
</div>
 
</div>
 
</template>
 
<script>
 
export default {
 
data: function() {
 
return {
 
api_key: 'YOUR_API_KEY',
 
url_base: 'https://api.openweathermap.org/data/2.5/',
 
weather: {},
 
code: '',
 
temp: 0,
 
// 날씨 표현 시 사용될 icon 배열
 
icons: [
 
'mdi-weather-lightning-rainy', // 2xx : Thunderstorm
 
'mdi-weather-rainy', // 3xx : Drizzle
 
'mdi-weather-pouring', // 5xx : Rain
 
'mdi-weather-snowy', // 6xx : Snow
 
'mdi-weather-fog', // 7xx : Atmosphere
 
'mdi-weather-sunny', // 800 : Clear
 
'mdi-weather-cloudy', // 8xx : Clouds
 
],
 
}
 
},
 
mounted() {
 
// API 요청 URL (지역 Seoul 고정)
 
let fetchUrl = `${this.url_base}weather?q=Seoul&units=metric&APPID=${this.api_key}`
 
fetch(fetchUrl)
 
.then(response => {
 
return response.json()
 
})
 
.then(result => {
 
this.weather = result // 날씨 정보
 
this.temp = result.main.temp // 기온
 
this.code = result.weather[0].id.toString() // 날씨 코드
 
})
 
},
 
}
 
</script>
 
 
 
<style scoped>
 
#weather {
 
font-size: 0.875rem;
 
font-weight: 500;
 
}
 
</style>
  • icons 배열의 사용 용도는 특정 날씨 코드에 따라 해당 날씨 아이콘을 표시하기 위함으로 공식 사이트에서 제공하는 날씨 코드표에 따라 맨 앞자리를 통해 해당 아이콘을 표시하도록 구현하였다.
  • API Key는 공식 사이트에서 발급받을 수 있다.
  • API 요청 시 지역을 Text Field를 통해 입력 받아 해당 지역의 날씨 정보를 받아서 표시하도록 구현할 수 있다.

동작 확인

 

 

[출처] https://dev-jsk.tistory.com/129

 

 

 

본 웹사이트는 광고를 포함하고 있습니다.
광고 클릭에서 발생하는 수익금은 모두 웹사이트 서버의 유지 및 관리, 그리고 기술 콘텐츠 향상을 위해 쓰여집니다.
번호 제목 글쓴이 날짜 조회 수
206 [Java Web programming] [Spring] WebFlux란 무엇인가? - 개념(특징), MVC와 비교, 사용 이유 file 졸리운_곰 2023.07.18 78
205 [Java Web programming] [Spring Boot + Vue.js] 게시판 만들기 - 에러 file 졸리운_곰 2023.04.07 72
204 [Java Web programming] [Spring Boot + Vue.js] 게시판 만들기 - 버튼 file 졸리운_곰 2023.04.07 82
203 [Java Web programming] [Spring Boot + Vue.js] 게시판 만들기 - Toast UI Editor, Viewer file 졸리운_곰 2023.04.07 67
202 [Java Web programming] [Spring Boot + Vue.js] 게시판 만들기 - Tooltip, Snackbar file 졸리운_곰 2023.04.07 80
» [Java Web programming] [Spring Boot + Vue.js] 게시판 만들기 - 날짜, 시간, 날씨 file 졸리운_곰 2023.04.07 76
200 [Java Web programming] [Spring Boot + Vue.js] 게시판 만들기 - 구성 졸리운_곰 2023.04.07 77
199 [Java Web programming] [Spring Boot + Vue.js] 게시판 만들기 - 소개 file 졸리운_곰 2023.04.07 85
198 [Java Web programming] SpringBoot, Vue 연동하기 file 졸리운_곰 2023.01.30 99
197 [JSP] [jstl ] case when 중첩 방법 file 졸리운_곰 2023.01.24 69
196 [JSP] intelliJ로 JSP 프로젝트 생성, Servlet 실행해보기 file 졸리운_곰 2022.12.31 95
195 [JSP} Jsp 커스텀 태그라이브러리(Custom Tag Library Descriptor) 생성 및 사용 졸리운_곰 2022.12.07 90
194 [JSP] JSP 커스텀 태그(Custom Tag) - 태그파일 file 졸리운_곰 2022.12.07 78
193 [Java Web programming] Velocity 사용하기 졸리운_곰 2022.08.11 89
192 [java html template engine] [Velocity] velocity 기본 문법 file 졸리운_곰 2022.08.10 90
191 [Java Web 프로그래밍] SPRING BOOT SSO 자료 정리 file 졸리운_곰 2022.07.27 113
190 [Spring] 스프링 tiles 사용하기! file 졸리운_곰 2021.10.17 108
189 [JSP][Java] [JSP] JSP 문법 구조 / include를 활용해 layout 나누기 file 졸리운_곰 2021.09.09 89
188 [SpringBoot] 타임리프(Thymeleaf) Thymleaf for template engine file 졸리운_곰 2021.09.05 77
187 [스프링부트] Spring Boot + Thymeleaf CRUD Example file 졸리운_곰 2021.09.03 76
대표 김성준 주소 : 경기 용인 분당수지 U타워 등록번호 : 142-07-27414
통신판매업 신고 : 제2012-용인수지-0185호 출판업 신고 : 수지구청 제 123호 개인정보보호최고책임자 : 김성준 sjkim70@stechstar.com
대표전화 : 010-4589-2193 [fax] 02-6280-1294 COPYRIGHT(C) stechstar.com ALL RIGHTS RESERVED