Barista: ๋‚ ์งœ ์„ ํƒ๊ธฐ ๊ตฌ์„ฑ์š”์†Œ

์— ๋งŒ๋“  2020๋…„ 04์›” 20์ผ  ยท  29์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: dynatrace-oss/barista

๊ธฐ๋Šฅ ์š”์ฒญ

์š”์•ฝ

๋‚ ์งœ ์„ ํƒ์„ ์œ„ํ•œ ์ „์šฉ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ng ์ž๋ฃŒ์˜ ๋‚ ์งœ ์„ ํƒ๊ธฐ ๊ตฌ์„ฑ์š”์†Œ์™€ ์œ ์‚ฌ: https://material.angular.io/components/datepicker/overview

๊ธฐ๋Šฅ ์„ค๋ช…

๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค์Œ ์†์„ฑ์„ ์ง€์›ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

  • ๋‚ ์งœ: ๋‚ ์งœ; ๊ตฌ์„ฑ ์š”์†Œ ๊ฐ’์— ๋Œ€ํ•œ ๋ฐ”์ธ๋”ฉ
  • ํ˜•์‹: ๋ฌธ์ž์—ด; "YYYY/MM/DD"์™€ ๊ฐ™์€ ๋‚ ์งœ ํ˜•์‹
  • ๋น„ํ™œ์„ฑํ™”๋จ: ๋ถ€์šธ; ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ™œ์„ฑํ™” ๋˜๋Š” ๋น„ํ™œ์„ฑํ™”๋˜์–ด ์žˆ์Šต๋‹ˆ๊นŒ?
  • ๋ณ€๊ฒฝ๋จ: ์ด๋ฒคํŠธ; ๊ฐ’์ด ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฐœ์ƒ
  • ๋ฒ”์œ„ ์‹œ์ž‘: ๋‚ ์งœ; ์„ ํƒ ๊ฐ€๋Šฅํ•œ ๋‚ ์งœ ๋ฒ”์œ„
  • rangeTo: ๋‚ ์งœ; ์„ ํƒ ๊ฐ€๋Šฅํ•œ ๋‚ ์งœ ๋ฒ”์œ„

์šฐ์„  ๊ธฐ๋ณธ ๋ฒ„์ „์„ ์ œ๊ณตํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค. ๋ฒ„ํŠผ์ด ์žˆ๋Š” ์ž…๋ ฅ ํ•„๋“œ ์˜†์— ๋‚ ์งœ ์„ ํƒ๊ธฐ ์˜ค๋ฒ„๋ ˆ์ด๋ฅผ ์—ด๋ ค๋ฉด(์ฒจ๋ถ€๋œ ์Šคํฌ๋ฆฐ์ƒท ์ฐธ์กฐ)

์ฒจ๋ถ€ ํŒŒ์ผ

์žฌ๋ฃŒ ๋‚ ์งœ ์„ ํƒ๊ธฐ์˜ ์Šคํฌ๋ฆฐ์ƒท:
datepicker

feature has-pr needs discussion new component

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

Intl.DateFormat : ๋‚ด๊ฐ€ ์ง€๊ธˆ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ๋Œ€์ฒด๋ฅผ ์‰ฝ๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž ์ง€์ • ๋‚ ์งœ/์‹œ๊ฐ„ ๊ณ„์‚ฐ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด PR์€ wip์ด๋ฉฐ ๋‚˜๋Š” ์•„์ง ๊ทธ๋Ÿฌํ•œ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•œ ์ž‘์—…์„ ๋‹ค๋ฃจ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค์— ์–ด๋–ค ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ์ง€ ์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ณ„์† ํ™•์žฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

๋ชจ๋“  29 ๋Œ“๊ธ€

@gselltho ์ด ๊ธฐ๋Šฅ ์š”์ฒญ์„ ์—ด์–ด์ฃผ์…”์„œ ๋Œ€๋‹จํžˆ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค!
์ด ์ฃผ์ œ์— ๋Œ€ํ•ด @dynatrace-oss/ux-core ํŒ€๊ณผ ๊ธด๋ฐ€ํ•œ ํ˜‘๋ ฅ์ด ํ•„์š”ํ•˜๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ์•„๋งˆ๋„ ๊ทธ๋“ค์€ ์ด๋ฏธ ์ด ์ฃผ์ œ์— ๋Œ€ํ•œ ๋ช‡ ๊ฐ€์ง€ ๋ชจํ˜•์„ ๋งŒ๋“ค์—ˆ๊ฑฐ๋‚˜ ์šฐ๋ฆฌ์—๊ฒŒ ํ†ต์ฐฐ๋ ฅ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฏธ ์ผ๋ถ€ ๋ชจํ˜•์ด๋‚˜ ๋””์ž์ธ์ด ์žˆ๋Š” ๊ฒฝ์šฐ ์ด ๋ฌธ์ œ๋Š” ํ•„์š”ํ•œ ๋ชจ๋“  ์ •๋ณด์™€ API ์ œ์•ˆ์„ ์ˆ˜์ง‘ํ•˜๋Š” ์ข‹์€ ์ถœ๋ฐœ์ ์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์–ด๋–ค ๋ชฉ์ ์— ๋‚ ์งœ ์„ ํƒ ๋„๊ตฌ๊ฐ€ ํ•„์š”ํ•œ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ์ง€๋งŒ Arkadiusz Lipiarz๋Š” ํ˜„์žฌ ์˜ค๋žซ๋™์•ˆ ๊ทธ์˜ ํŒ€๊ณผ ํ•จ๊ป˜ ๊ธ€๋กœ๋ฒŒ ์‹œ๊ฐ„ ํ”„๋ ˆ์ž„ ์„ ํƒ ๋„๊ตฌ๋กœ ์‚ฌ์šฉํ•  ๋‚ ์งœ ์„ ํƒ ๋„๊ตฌ์— ๋Œ€ํ•ด ์ž‘์—…ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
image ๋ฐ๋ชจ ํ™˜๊ฒฝ์—์„œ ์ด๋ฏธ ๊ตฌํ˜„๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค. ์ด ๊ฒฝ์šฐ์—๋Š” ๊ทธ์™€ ์ด์•ผ๊ธฐํ•˜๋Š” ๊ฒƒ์ด ๊ฐ€์žฅ ์ข‹์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

์šฐ๋ฆฌ๋Š” ๊ณผ๊ฑฐ์— ํ† ๋ก ์„ ํ–ˆ๊ณ  @ursula-wieshofer๊ฐ€ ์ œํ’ˆ์— ๋Œ€ํ•ด ์•ฝ๊ฐ„์˜ ํ‰๊ฐ€๋ฅผ ํ–ˆ์œผ๋ฉฐ ์ด ํ•˜๋‚˜ ๋˜๋Š” ๋‘ ๊ฐœ์˜ ๋‚ ์งœ ์„ ํƒ๊ธฐ๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ์ด๊ฒƒ์ด ์šฐ์„  ์ˆœ์œ„ ๋ชฉ๋ก์—์„œ ๋†’์ง€ ์•Š๋‹ค๋Š” ๊ฒƒ์„ ์˜๋ฏธํ–ˆ์Šต๋‹ˆ๋‹ค.

@gselltho ๋‚˜๋Š” ์ด๊ฒƒ์„ ๋” ๋…ผ์˜ํ•˜๊ณ  ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉํ‘œ๋กœ ํ•˜๋Š” ๊ฒƒ์ด ํ•ฉ๋ฆฌ์ ์ด๋ผ๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
@angular/components์—์„œ ๋งŽ์€ ๊ฒƒ์„ ๋ฐฐ์šฐ๊ณ  ๋‹จ์ˆœํ™”๋œ ๋ฒ„์ „์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค.
๋” ์ž์„ธํ•œ API ์ œ์•ˆ์„ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์•ˆ๋…•ํ•˜์„ธ์š”!

๋”ฐ๋ผ์„œ ์šฐ๋ฆฌ ํŒ€์ด ๋งŒ๋“  ๊ธฐ๋Šฅ์€ @gselltho์— ๋‚˜์—ด๋œ ์‚ฌ์šฉ ์‚ฌ๋ก€ ๋ฐ ํ›จ์”ฌ ๋” ๋งŽ์€ ๊ฒฝ์šฐ์— ์ ํ•ฉํ•  ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ์‚ฌ์ดํŠธ ์ƒ๋‹จ ์™ธ์—๋„ Dashboard ํŒ€์—์„œ ๋กœ์ปฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. Angular์™€ GWT๋กœ ์ค€๋น„ํ–ˆ์Šต๋‹ˆ๋‹ค. ๊ด€์‹ฌ์ด ์žˆ์œผ์‹œ๋ฉด Slack์—์„œ ์ €์—๊ฒŒ ์—ฐ๋ฝํ•˜์‹ญ์‹œ์˜ค.

ํ•˜์ง€๋งŒ... Ryan๊ณผ ๊ทธ์˜ ํŒ€์€ ๋‹น์‹ ์ด ๊ณต์œ ํ•œ ๊ฒƒ๊ณผ ๋งค์šฐ ์œ ์‚ฌํ•œ ์†”๋ฃจ์…˜์„ ์ค€๋น„ํ•˜๊ณ  ์žˆ์—ˆ๋˜ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ฐ™์ด ํ‘œ์‹œ๋ฉ๋‹ˆ๋‹ค.

Screenshot 2020-04-21 at 10 56 23

์ฝ”๋“œ ์†Œ์œ ์ž๋Š” @areknow ์ด๋ฉฐ ์ž์„ธํ•œ ๋‚ด์šฉ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์•ˆ๋…• ์–˜๋“ค์•„, ๋‚˜๋Š” ๋‹ค์Œ์ด ๋ฌด์—‡์ธ์ง€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. Ryans ํŒ€์˜ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ฐ์ง„ ์žฌ๋ฃŒ์ด๋ฉฐ ๋‚ด๊ฐ€ ํ•„์š”ํ•œ ์ •ํ™•ํ•œ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„์ฃผ ๊ธฐ๋ณธ์ ์ธ ๊ตฌ์„ฑ ์š”์†Œ์ด๊ธฐ ๋•Œ๋ฌธ์— ์ง‘์— ๋ฐ”๋ฆฌ์Šคํƒ€ ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์žˆ์–ด์•ผ ํ•˜๊ณ  ๋” ๋งŽ์€ ํŒ€์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์Šต๋‹ˆ๋‹ค.

@ffriedl89 : ๋ฌผ๋ก , ๋” ์ž์„ธํ•œ API ์„ค๋ช…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ ์–ด๋„ ์ฒซ ๋ฒˆ์งธ ๊ตฌํ˜„์— ๋Œ€ํ•œ ์ œํ•œ๋œ ๊ธฐ๋Šฅ ์„ธํŠธ์— ๋Œ€ํ•ด์„œ๋Š”. ๋‚˜๋Š” ์•ž์œผ๋กœ ๋ฉฐ์น  ์•ˆ์— ์—ฌ๊ธฐ์— ๊ฒŒ์‹œ ํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค

์•ˆ๋…•ํ•˜์„ธ์š” @gselltho , ์ €๋Š” spine-x

Angular CDK์—๋Š” ๋‚ ์งœ ์„ ํƒ๊ธฐ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์œผ๋ฏ€๋กœ ์ด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ฒ˜์Œ๋ถ€ํ„ฐ ์ž‘์„ฑํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋ชจ๋…ธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋‚ ์งœ ์„ ํƒ๊ธฐ ๊ณต์œ  ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ๋ฌธ์ œ๊ฐ€ ์žˆ์Šต๋‹ˆ๊นŒ?

๊ฑด๋ฐฐ

์•ˆ๋…•ํ•˜์„ธ์š” @areknow , ๊ท€ํ•˜์˜ ๊ตฌ์„ฑ ์š”์†Œ๋Š” ํ›Œ๋ฅญํ•ฉ๋‹ˆ๋‹ค! Angulars Reactive Form ๊ธฐ๋Šฅ(ControlValueAccessor)์ด ๊ทธ๋ฆฌ์›Œ, Barista ๋ฐ Angular Reactive ์–‘์‹ ๋‚ด์—์„œ ์›ํ™œํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋ ค๋ฉด DtFormFieldControl์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

@gselltho ๋‹ค์‹œ ๋ฌธ์˜ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค. @areknow๊ฐ€ ์„ค๋ช…ํ•œ ๋Œ€๋กœ์ž…๋‹ˆ๋‹ค. ๊ทธ์˜ ๊ตฌ์„ฑ ์š”์†Œ๋Š” angular/components ์ €์žฅ์†Œ์˜ ์žฌ์งˆ ๋ฐ ๊ธฐํƒ€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๋Œ€ํ•œ ์ข…์†์„ฑ์„ ๋„์ž…ํ•˜๋Š” ์Šคํƒ€์ผ์ด ๋ณ€๊ฒฝ๋œ ์žฌ์งˆ ๊ตฌ์„ฑ ์š”์†Œ์ž…๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์€ ๋˜ํ•œ ๊ฑฐ๋Œ€ํ•˜๊ณ  ๋‚˜๋ฌด๊ฐ€ ํ”๋“ค๋ฆด ์ˆ˜ ์—†๋Š” moment.js์— ๋Œ€ํ•œ ๊ฐ•ํ•œ ์˜์กด์„ฑ๊ณผ ํ•จ๊ป˜ ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.
๋ถˆํ–‰ํžˆ๋„ CDK์—๋Š” ์•„์ง ๋‚ ์งœ ์„ ํƒ ๋„๊ตฌ๊ฐ€ ํฌํ•จ๋˜์–ด ์žˆ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
์ง€๊ธˆ๊นŒ์ง€ datepicker๋Š” ์ œํ’ˆ์— ๊ธ€๋กœ๋ฒŒ ํƒ€์ž„ํ”„๋ ˆ์ž„ ์„ ํƒ๊ธฐ๋ฅผ ์ œ์™ธํ•˜๊ณ ๋Š” datepicker๊ฐ€ ์—†๊ธฐ ๋•Œ๋ฌธ์— ๋งŽ์€ ํŒ€์ด ํ•„์š”๋กœ ํ•˜๋Š” ๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ์•„๋‹ˆ์—ˆ์Šต๋‹ˆ๋‹ค.

๊ตฌ์„ฑ ์š”์†Œ๊ฐ€ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ ํ•จ๊ป˜ ํ˜‘๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค๋ฉด ์ •๋ง ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. ์ด ํ”„๋กœ์„ธ์Šค๋Š” ์ด๋ฒˆ ํ˜ธ์—์„œ ์ด์— ๋Œ€ํ•œ API ์ œ์•ˆ์„ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. :)
์ด ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ์‹œ์ž‘ํ•˜๋Š” ๋ฐ ๋„์›€์ด ๋˜๋ฉฐ ๊ฐœ๋ฐœ ํ”„๋กœ์„ธ์Šค๋ฅผ ์•ˆ๋‚ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ๊ทธ ๊ณผ์ •์—์„œ ๋„์›€์ด ๋  ๊ฒƒ์ž…๋‹ˆ๋‹ค.

ํ˜„์žฌ ๋ฐ”๋ฆฌ์Šคํƒ€ ํŒ€์€ ์ด ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์— ์ถ”๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ๊ธฐ์—ฌ์ž์˜ ๋„์›€์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์—ฌ๊ธฐ์— ๋„์›€์„ ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์ด๋ด, ์„ค์ • VCT๋„ ์ด์ œ ๋‚ ์งœ/์‹œ๊ฐ„ ์„ ํƒ๊ธฐ๊ฐ€ ํ•„์š”ํ•˜๋ฏ€๋กœ ์ฒ˜๋ฆฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ ์˜๊ฒฌ์—์„œ๋Š” ๋ชจ๋“  ์š”๊ตฌ ์‚ฌํ•ญ์„ ์ˆ˜์ง‘ํ•œ ๋‹ค์Œ API๋ฅผ ์ œ์•ˆํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

๊ฑฐ๊ธฐ์— ์žˆ์–ด์•ผ ํ•  ๊ธฐ๋Šฅ/์š”๊ตฌ ์‚ฌํ•ญ์ด ์žˆ๊ณ  ์•„์ง ๋‚˜์—ด๋˜์ง€ ์•Š์€ ๊ฒฝ์šฐ ์•Œ๋ ค์ฃผ์‹ญ์‹œ์˜ค.

cc @areknow

์š”๊ตฌ ์‚ฌํ•ญ:

์ผ๋ฐ˜์ ์ธ ์š”๊ตฌ ์‚ฌํ•ญ

  • ๋‚ ์งœ ์„ ํƒ : ์‚ฌ์šฉ์ž๊ฐ€ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์‹œ๊ฐ„ ์„ ํƒ : ๋‚ ์งœ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ์‚ฌ์šฉ์ž๋Š” ์ถ”๊ฐ€ ์‹œ๊ฐ„์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • **๋ฏธ๋ฆฌ ์ฑ„์šฐ๊ธฐ
  • ๋น„ํ™œ์„ฑํ™”๋จ : ์†Œ๋น„์ž๊ฐ€ ์ „์ฒด ๋‚ ์งœ ์„ ํƒ๊ธฐ๋ฅผ ๋น„ํ™œ์„ฑํ™”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„ ํƒ ๊ฐ€๋Šฅ ๋ฒ”์œ„ : ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•  ์ˆ˜ ์žˆ๋Š” ๋‚ ์งœ์˜ ๋ฒ”์œ„๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•จ (์ตœ์†Œ/์ตœ๋Œ€ ์ž…๋ ฅ์„ ํ†ตํ•ด ๊ตฌํ˜„ ๊ฐ€๋Šฅ)
  • ์‹œ๊ฐ„๋Œ€ : ์‚ฌ์šฉ์ž๊ฐ€ ์„ ํƒํ•œ ๋‚ ์งœ์˜ ์‹œ๊ฐ„๋Œ€๋ฅผ ์ •์˜ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ธฐ์ˆ  ์š”๊ตฌ ์‚ฌํ•ญ

  • NgModel compatible : datepicker๋Š” angular ํ˜•ํƒœ์™€ ํ˜ธํ™˜๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • Form-field compatible : datepicker๋Š” ์œ ํšจํ•œ form-field-control์ด์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋ชจ๋“ˆ์„ฑ : datepicker๋Š” ์†Œ๋น„์ž๊ฐ€ ์ „์ฒด datepicker ๊ตฌ์„ฑ ์š”์†Œ ๋Œ€์‹  ๋ถ€๋ถ„๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ํ•˜์œ„ ๊ตฌ์„ฑ ์š”์†Œ/์ง€์‹œ์–ด/์œ ํ‹ธ๋ฆฌํ‹ฐ๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: ์‹œ๊ฐ„ ํ”„๋ ˆ์ž„ ์„ ํƒ๊ธฐ์˜ ์›”๋ณ„ ๋ณด๊ธฐ).
  • ๊ธฐ๋ณธ ๋‚ ์งœ ๊ฐœ์ฒด : ๋‚ ์งœ๋Š” ๊ธฐ๋ณธ Date ๊ฐœ์ฒด/ํด๋ž˜์Šค(์ „์ฒด ์†Œ๋น„์ž ๋Œ€๋ฉด API ํฌํ•จ)๋กœ ํ‘œ์‹œ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ผ๋ถ€ ์ถ”์ƒ ์‚ฌ์šฉ์ž ์ •์˜ ๊ตฌํ˜„์— ์˜ํ•œ ๊ฒƒ์ด ์•„๋‹™๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ๊ธฐ๋Šฅ/์„œ๋น„์Šค( DateAdapter )๊ฐ€ ํ•„์š”ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • Light & Dark ๋ชจ๋“œ : ์ปจํŠธ๋กค์ด ๋ฐ๊ณ  ์–ด๋‘์šด ํ…Œ๋งˆ๋ฅผ ์ง€์›ํ•ด์•ผ

์„ ํƒ์  ์š”๊ตฌ ์‚ฌํ•ญ (ํ•„์š”ํ•œ ๊ฒฝ์šฐ ํ™•์‹คํ•˜์ง€ ์•Š์Œ) :

  • ์„ ํƒ ๊ฐ€๋Šฅํ•œ ๋‚ ์งœ ์ œํ•œ :
  • ๋ฒ”์œ„ : ๋‹จ์ผ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•˜๋Š” ๊ฒƒ ์™ธ์—๋„ ๋‚ ์งœ ๋ฒ”์œ„๋ฅผ ์„ ํƒํ•  ์ˆ˜๋„ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์˜ˆ: 1.1.2020 - 10.1.2020).
  • ๋ชจ๋ฐ”์ผ ๋Œ€์ฒด : ๋ชจ๋ฐ”์ผ ์žฅ์น˜์—์„œ datepicker๋Š” ๊ธฐ๋ณธ ๋Œ€์‘์œผ๋กœ ๋Œ€์ฒด๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(์ฐธ๊ณ : ์‚ฌ์šฉ์ž ์ •์˜ ๋ฒ„์ „์— ๋Œ€ํ•ด ์ •์˜๋œ ๋ชจ๋“  ๊ธฐ๋Šฅ์ด ๊ธฐ๋ณธ ๋ฒ„์ „์—์„œ๋„ ์ง€์›๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•จ)

API ์ œ์•ˆ

_ WIP: ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์กฐ์ •๋ฉ๋‹ˆ๋‹ค.

Datepicker๋Š” ์—ฌ๋Ÿฌ ๊ตฌ์„ฑ ์š”์†Œ๋กœ ๊ตฌ์„ฑ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ ์งœ ์„ ํƒ๊ธฐ( dt-datepicker )

๋‚ ์งœ ์„ ํƒ๊ธฐ ์ž์ฒด. ์ด ๊ตฌ์„ฑ ์š”์†Œ๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ํ•˜๋‚˜์˜ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ๋‚ ์งœ ์„ ํƒ๊ธฐ๋กœ ๊ฒฐํ•ฉํ•ฉ๋‹ˆ๋‹ค(์š”๊ตฌ ์‚ฌํ•ญ ์ฐธ์กฐ).

์ž…๋ ฅ

| ์ด๋ฆ„ | ์œ ํ˜• | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… |
| ---------- | ----------- | -------------- | ------------ |
| ๊ฐ€์น˜ | D \| null | null | ์„ ํƒํ•œ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. |
| ์‹œ์ž‘์‹œ๊ฐ„ | D \| null | null | ๋‹ฌ๋ ฅ์„ ์ฒ˜์Œ ์—ฌ๋Š” ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. selected ๊ฐ€ ์„ค์ •๋œ ๊ฒฝ์šฐ ๋ฌด์‹œ๋ฉ๋‹ˆ๋‹ค. ํ‘œ์‹œ ์ „์šฉ์œผ๋กœ ๋‚ด๋ถ€์ ์œผ๋กœ ์˜ค๋Š˜ ๋‚ ์งœ๊ฐ€ ๊ธฐ๋ณธ๊ฐ’์ž…๋‹ˆ๋‹ค. |
| ๋ถ„ | D \| null | null | ์ตœ์†Œ ์œ ํšจ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. |
| ์ตœ๋Œ€ | D \| null | null | ์ตœ๋Œ€ ์œ ํšจ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. |
| ์žฅ์• ์ธ | boolean | false | ๋‚ ์งœ ์„ ํƒ๊ธฐ๊ฐ€ ๋น„ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. |
| isTimeEnabled | boolean | false | ์‹œ๊ฐ„ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. |
| ๋ฒ”์œ„ ํ™œ์„ฑํ™” | boolean | false | ๋ฒ”์œ„ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค. |

Dt์บ˜๋ฆฐ๋”( dt-calendar )

๋‹ฌ๋ ฅ ๋ณด๊ธฐ์—์„œ ๋‚ ์งœ๋ฅผ ์„ ํƒํ•˜๊ธฐ ์œ„ํ•œ ๊ตฌ์„ฑ ์š”์†Œ( calendar-body ๊ตฌ์„ฑ ์š”์†Œ). ๋‹ฌ๋ ฅ ๋ณด๊ธฐ(์›”) ๋ฐ ๋‹ค๋ฅธ ์›”๊ณผ ์—ฐ๋„ ์‚ฌ์ด๋ฅผ ํƒ์ƒ‰ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ์ปจํŠธ๋กค์ด ํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ

| ์ด๋ฆ„ | ์œ ํ˜• | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… |
| ---------- | ----------- | -------------- | ------------ |
| ์„ ํƒ | D \| null | null | ํ˜„์žฌ ์„ ํƒํ•œ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. |
| ์‹œ์ž‘์‹œ | D \| null | null | ๋‹ฌ๋ ฅ์„ ์‹œ์ž‘ํ•  ๊ธฐ๊ฐ„(์›” ๋˜๋Š” ์—ฐ๋„)์„ ๋‚˜ํƒ€๋‚ด๋Š” ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. |
| ์˜ˆ์ •์ผ | D \| null | null | ์„ ํƒ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. |
| ์ตœ๋Œ€ ๋‚ ์งœ | D \| null | null | ์„ ํƒ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. |

์ถœ๋ ฅ

| ์ด๋ฆ„ | ์œ ํ˜• | ์„ค๋ช… |
| ---------------- | ----------- | ------------ |
| ์„ ํƒ๋ณ€๊ฒฝ | D | ํ˜„์žฌ ์„ ํƒ๋œ ๋‚ ์งœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. |

์บ˜๋ฆฐ๋” ๋ณธ๋ฌธ( dt-calendar-body )

ํ•œ ๋‹ฌ ๋™์•ˆ ๋‹ฌ๋ ฅ ๊ทธ๋ฆฌ๋“œ๋งŒ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ

| ์ด๋ฆ„ | ์œ ํ˜• | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… |
| ------------ | ----------- | -------------- | ------------ |
| ํ™œ์„ฑ ๋‚ ์งœ | D | ์˜ค๋Š˜ | ์ด ์›” ๋ณด๊ธฐ์— ํ‘œ์‹œํ•  ๋‚ ์งœ์ž…๋‹ˆ๋‹ค(์›” ๋ฐ ์—ฐ๋„ ์ด์™ธ์˜ ๋ชจ๋“  ํ•ญ๋ชฉ์€ ๋ฌด์‹œ๋จ). |
| ์„ ํƒ | D \| null | null | ํ˜„์žฌ ์„ ํƒํ•œ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. |
| ์˜ˆ์ •์ผ | D \| null | null | ์„ ํƒ ๊ฐ€๋Šฅํ•œ ์ตœ์†Œ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. |
| ์ตœ๋Œ€ ๋‚ ์งœ | D \| null | null | ์„ ํƒ ๊ฐ€๋Šฅํ•œ ์ตœ๋Œ€ ๋‚ ์งœ์ž…๋‹ˆ๋‹ค. |
| ๋‚ ์งœ ํ•„ํ„ฐ | (date: D) => boolean | - | ๋‚ ์งœ ์„ ํƒ ๊ฐ€๋Šฅ ์—ฌ๋ถ€๋ฅผ ํ•„ํ„ฐ๋งํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. |

์ถœ๋ ฅ

| ์ด๋ฆ„ | ์œ ํ˜• | ์„ค๋ช… |
| ------------------ | ----------- | ------------ |
| ์„ ํƒ๋ณ€๊ฒฝ | EventEmitter<D> | ์ƒˆ ๊ฐ’์ด ์„ ํƒ๋˜๋ฉด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. |
| ํ™œ์„ฑ ๋‚ ์งœ ๋ณ€๊ฒฝ | EventEmitter<D> | ๋‚ ์งœ๊ฐ€ ํ™œ์„ฑํ™”๋˜๋ฉด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค. |

์‹œ๊ฐ„ ์„ ํƒ๊ธฐ('dt-timepicker')

์‹œ๊ฐ„ ์ž…๋ ฅ(์‹œ ๋ฐ ๋ถ„ ์ž…๋ ฅ ํฌํ•จ)์„ ํฌํ•จํ•˜๋Š” ์‹œ๊ฐ„ ์„ ํƒ๊ธฐ๋ฅผ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ

| ์ด๋ฆ„ | ์œ ํ˜• | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… |
| ------------ | ----------- | -------------- | ------------ |
| ๊ฐ’ ๋ ˆ์ด๋ธ” | ๋ฌธ์ž์—ด | '' | ๋ฒ”์œ„ ๋ชจ๋“œ์—์„œ ๋‚ ์งœ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜๋Š” ๋ ˆ์ด๋ธ”์ž…๋‹ˆ๋‹ค.
| ์‹œ๊ฐ„ | ๋ฒˆํ˜ธ \| ๋„ | ๋„ | ์‹œ๊ฐ„ ์„ ํƒ๊ธฐ์— ํ‘œ์‹œํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
| ๋ถ„ | ๋ฒˆํ˜ธ \| ๋„ | ๋„ | ์‹œ๊ฐ„ ์„ ํƒ๊ธฐ์— ํ‘œ์‹œํ•  ๋ถ„์ž…๋‹ˆ๋‹ค.
| ์žฅ์• ์ธ | ๋ถ€์šธ | ๊ฑฐ์ง“ | timepicker ๋ฐ ํ•ด๋‹น ์ž…๋ ฅ์˜ ๋น„ํ™œ์„ฑํ™” ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
| isTimeRangeํ™œ์„ฑํ™” | ๋ถ€์šธ | ๊ฑฐ์ง“ | ์‹œ๊ฐ„ ๋ฒ”์œ„ ๋ชจ๋“œ๊ฐ€ ํ™œ์„ฑํ™”๋˜์—ˆ๋Š”์ง€ ์—ฌ๋ถ€์ž…๋‹ˆ๋‹ค.

์ถœ๋ ฅ

| ์ด๋ฆ„ | ์œ ํ˜• | ์„ค๋ช… |
| ------------------ | ----------- | ------------ |
| ์‹œ๊ฐ„๋ณ€๊ฒฝ | ์ด๋ฒคํŠธ ์ด๋ฏธํ„ฐ| ์‹œ๊ฐ„ ์ž…๋ ฅ์ด ํ๋ฆผ์— ์œ ํšจํ•œ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ timeChange ์ด๋ฒคํŠธ๋ฅผ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ์ž…๋ ฅ('dt-timeinput')

์‹œ๊ฐ„ ๋ฐ ๋ถ„ ์ž…๋ ฅ์„ ํฌํ•จํ•˜๋Š” timeinput์„ ํ˜ธ์ŠคํŒ…ํ•ฉ๋‹ˆ๋‹ค.

์ž…๋ ฅ

| ์ด๋ฆ„ | ์œ ํ˜• | ๊ธฐ๋ณธ๊ฐ’ | ์„ค๋ช… |
| ------------ | ----------- | -------------- | ------------ |
| ์‹œ๊ฐ„ | ๋ฒˆํ˜ธ \| ๋„ | ๋„ | time์ž…๋ ฅ์— ํ‘œ์‹œํ•  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค.
| ๋ถ„ | ๋ฒˆํ˜ธ \| ๋„ | ๋„ | ์‹œ๊ฐ„ ์ž…๋ ฅ์— ํ‘œ์‹œํ•  ๋ถ„์ž…๋‹ˆ๋‹ค.
| ์žฅ์• ์ธ | ๋ถ€์šธ | ๊ฑฐ์ง“ | ์ž…๋ ฅ์ด ๋น„ํ™œ์„ฑํ™”๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

์ถœ๋ ฅ

| ์ด๋ฆ„ | ์œ ํ˜• | ์„ค๋ช… |
| ------------------ | ----------- | ------------ |
| ์‹œ๊ฐ„๋ณ€๊ฒฝ | ์ด๋ฒคํŠธ ์ด๋ฏธํ„ฐ| ์‹œ๊ฐ„ ์ž…๋ ฅ์ด ํ๋ฆผ์— ์œ ํšจํ•œ ๊ฐ’์„ ํฌํ•จํ•˜๋Š” ๊ฒฝ์šฐ timeChange ์ด๋ฒคํŠธ๋ฅผ ๋‚ด๋ณด๋ƒ…๋‹ˆ๋‹ค.

datepicker๊ฐ€ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ์š”๊ตฌ ์‚ฌํ•ญ/๊ธฐ๋Šฅ ์•„๋ž˜์— ๊ฒŒ์‹œํ•˜์‹ญ์‹œ์˜ค. ์ด์ „ ๋Œ“๊ธ€ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

@thomaspink ์ž˜ ์ฑ™๊ฒจ ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค๐Ÿ‘
๊ท€ํ•˜์˜ ์š”๊ตฌ ์‚ฌํ•ญ ์„ค๋ช…์—๋Š” ๋‚ด๊ฐ€ ํ•„์š”ํ•œ ๋ชจ๋“  ๊ฒƒ์ด ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๋‹ค. ๋‹ค์Œ๊ณผ ๊ด€๋ จํ•˜์—ฌ ์งˆ๋ฌธ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
Selecting a time: In addition to selecting a date the user must also be able to select an additional time.
์‹œ๊ฐ„์€ ์„ ํƒ ์‚ฌํ•ญ์ž…๋‹ˆ๋‹ค. ๋‚ ์งœ๋งŒ, ์‹œ๊ฐ„๋งŒ ๋˜๋Š” ๋‘˜ ๋‹ค ์„ ํƒ ๊ฐ€๋Šฅํ•œ ํ•ญ๋ชฉ์„ ์„ ํƒํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

@gselltho ํ”ผ๋“œ๋ฐฑ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค ๐Ÿ‘

์•„์ด๋””์–ด๋Š” ๋‚ ์งœ์™€ ์‹œ๊ฐ„์„ ๊ธฐ๋ณธ๊ฐ’์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด์ง€๋งŒ ์‹œ๊ฐ„ ๋ถ€๋ถ„์„ ๋น„ํ™œ์„ฑํ™”ํ•˜์—ฌ ๋‚ ์งœ๋กœ๋งŒ ๋งŒ๋“ค๊ฑฐ๋‚˜ ๊ทธ ๋ฐ˜๋Œ€์˜ ๋ฐฉ๋ฒ•์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์ด ๋ฌด์—‡์ธ์ง€ ํ™•์‹คํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค(๋” ๋งŽ์€ ์†Œ๋น„์ž๊ฐ€ ๋‚ ์งœ ์„ ํƒ๊ธฐ ๋˜๋Š” ๋‚ ์งœ/์‹œ๊ฐ„ ์„ ํƒ๊ธฐ๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๊นŒ).

์‹œ๊ฐ„๋Œ€๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. spine X์˜ ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์—๋Š” ํŠน์ • ๋ ˆ๊ฑฐ์‹œ API์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด UTC๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๋˜ํ•œ @gselltho๊ฐ€ ๋งํ–ˆ๋“ฏ์ด ๋ฐ์ดํŠธ๋งŒ ํ•  ์ˆ˜ ์žˆ๋Š” ์˜ต์…˜์ด ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค!

์—ฌ๊ธฐ์— ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ƒ๋Œ€ ๋‚ ์งœ๊ฐ€ ํฌํ•จ๋ฉ๋‹ˆ๊นŒ? "์ง€๊ธˆ", "2์ฃผ ์ „" ๋“ฑ๊ณผ ๊ฐ™์ด?

ํ•œ ๊ฐ€์ง€ ๋” ์š”๊ตฌ์‚ฌํ•ญ(~ GTS):

  • ์šฐ๋ฆฌ๋Š” ๋ฐ๊ณ  ์–ด๋‘์šด ๋ฒ„์ „์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค

๊ฐ€์ ธ์„œ ์ข‹๋‹ค:

  • ๋ชจ๋ฐ”์ผ ๋ธŒ๋ผ์šฐ์ €์—์„œ -> ๊ธฐ๋ณธ ๋‚ ์งœ/์‹œ๊ฐ„ ์„ ํƒ ์ปจํŠธ๋กค๋กœ ๋Œ€์ฒด

@toddbaert ์ „์—ญ ์‹œ๊ฐ„ ํ”„๋ ˆ์ž„ ์„ ํƒ๊ธฐ์™€ ๋ณ„๋„๋กœ ์ด ์ผ๋ฐ˜ ๋‚ ์งœ ์„ ํƒ๊ธฐ์˜ ์‚ฌ์šฉ

@pieniazek @areknow ๊ฐ€ ๋ชฉ๋ก์— ์ถ”๊ฐ€๋จ

@thomaspink ์ผ๊ด€์„ฑ์˜ ์ด์œ ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋‚ ์งœ ์„ ํƒ๊ธฐ๋ฅผ ๋” ์‰ฝ๊ฒŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ๋‹ฌ๋ ฅ๋„ ํฌํ•จํ•˜๋Š” ์ „์—ญ ์‹œ๊ฐ„ ํ”„๋ ˆ์ž„ ์„ ํƒ๊ธฐ ๋ถ€๋ถ„์„ ๊ณ ์ˆ˜ํ•ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ธฐ๋ณธ ๊ธฐ๋Šฅ๊ณผ ํ•ธ๋“ค๋ง์€ ์Šคํƒ€์ผ๊ณผ ๋™์ผํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
์ด๊ฒƒ์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฏธ ๊ธฐ๋Šฅ์— ์ต์ˆ™ํ•ด์กŒ๊ธฐ ๋•Œ๋ฌธ์— ์‚ฌ์šฉ์ž๊ฐ€ ์ด๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.
Screenshot 2020-06-25 at 08 22 56

@thomaspink ์‚ฌ์šฉ์ž์—๊ฒŒ๋Š” ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š๊ฒ ์ง€๋งŒ ๋ฏธ๋ฆฌ ์ •์˜๋œ ์ƒ๋Œ€์  ๋‚ ์งœ๊ฐ€ ์œ ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ์ผ๋ถ€ UI๋ฅผ ๊ณง ๊ณต๊ฐœํ•  ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

@toddbaert ์ง€์›๋˜๋Š” ๊ฐ’ ๋ชฉ๋ก์ด ์žˆ์Šต๋‹ˆ๊นŒ? ๊ดœ์ฐฎ์œผ์‹œ๋‹ค๋ฉด ์ข‹์€ ๋ชฉ๋ก์— ์ถ”๊ฐ€ํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

datepicker์˜ ๊ฒฝ์šฐ ๋‚ ์งœ์™€ ์ •ํ™•ํ•œ ์ด๋ฆ„(์š”์ผ ์ด๋ฆ„ ํฌํ•จ)์„ ํ•œํŽธ์œผ๋กœ ํ‘œ์‹œํ•˜๊ณ  ๊ณ„์‚ฐํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ธฐ๋Šฅ๊ณผ ์ •๋ณด๋ฅผ ์ œ๊ณตํ•˜๋Š” ์ผ์ข…์˜ ์„œ๋น„์Šค(๊ฐํ˜• ์žฌ๋ฃŒ ๋ฐ์ดํ„ฐ ์–ด๋Œ‘ํ„ฐ์™€ ์œ ์‚ฌ)๋„ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. /๋ฐ˜๋ฉด์— ๊ธฐ๋ณธ ๋‚ ์งœ๋กœ ์ž‘์—…ํ•ฉ๋‹ˆ๋‹ค. ์ด "์„œ๋น„์Šค"๋Š” ์†Œ๋น„์ž๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ๋™์ผํ•œ ๋ฐฉ์‹์œผ๋กœ ๋‚ ์งœ๋ฅผ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ณ  ์šฐ๋ฆฌ๋Š” ์ด ๊ธฐ๋Šฅ์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฅผ ์œ„ํ•ด ์ตœ์†Œํ•œ 2๊ฐ€์ง€ ์˜ต์…˜์ด ์žˆ์Šต๋‹ˆ๋‹ค(๋” ๋งŽ์€ ์•„์ด๋””์–ด๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์•„๋ž˜์— ๊ฒŒ์‹œํ•ด ์ฃผ์‹œ๋ฉด ๊ฐ์‚ฌํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค).

  1. ๊ธฐ๋ณธ ๋‚ ์งœ API( Intl , Date )์™€ ์œ ํ‹ธ๋ฆฌํ‹ฐ ํ•จ์ˆ˜(์˜ˆ: addCalendarDays )๋ฅผ ๊ฒฐํ•ฉํ•˜๋Š” NativeDateAdapter๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ์–ด๋Œ‘ํ„ฐ๋Š” Angular Materials NativeDateAdapter ์™€ ๋งค์šฐ ์œ ์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ์ง€์›๋˜๋Š” ๋ชจ๋“  ๋ธŒ๋ผ์šฐ์ €์— ์ด๋ฏธ Intl' built in. We would also not need the possibility to have DateAdapter for different libraries as we only work with the native Date` API๊ฐ€ ์žˆ์œผ๋ฏ€๋กœ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ Intl ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ฒฝ์šฐ ํด๋ฐฑ์ด ํ•„์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  2. date-fns ์™€ ๊ฐ™์€ ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์ด๋ฅผ ๊ณ ๊ฐ์—๊ฒŒ ์ œ๊ณตํ•˜๋Š” ์„œ๋น„์Šค(DateAdapter)๋กœ ๋ž˜ํ•‘ํ•ฉ๋‹ˆ๋‹ค.

์ง€๊ธˆ์€ ์ถ”๊ฐ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ์—†์ด ๊ธฐ๋ณธ API๋ฅผ ๋งŽ์ด ์‚ฌ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์˜ต์…˜ 1์„ ๋” ์„ ํ˜ธํ•˜์ง€๋งŒ ์•„์ด๋””์–ด, ๊ฒฐ๊ณผ ๋ฐ ์˜๊ฒฌ๋„ ๊ฒŒ์‹œํ•ด ์ฃผ์„ธ์š”. :)

@thomaspink ๊ทธ๋Ÿฐ ์–ด๋Œ‘ํ„ฐ ์„œ๋น„์Šค๋ฅผ ๋งŒ๋“ค์–ด์•ผ ํ•œ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค. ์ด์ „์— Intl ๋ฐ Date ๋„ค์ดํ‹ฐ๋ธŒ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์‹ถ๋‹ค๊ณ  ๋งํ–ˆ์ง€๋งŒ Intl.DateFormat ์— ๋Œ€ํ•œ ์ง€์› ์„ ๋‹ค์‹œ ํ™•์ธํ–ˆ์ง€๋งŒ ๊ทธ๋ ‡์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์— ๋Œ€ํ•ด ๋งค์šฐ ํ–‰๋ณตํ•ฉ๋‹ˆ๋‹ค. ํŠนํžˆ ๋ถ€๋ถ„์ ์œผ๋กœ ๋ˆ„๋ฝ๋œ Range ํ˜•์‹์€ ์•ฝ๊ฐ„ ์•„์‰ฝ์Šต๋‹ˆ๋‹ค.

date-fns ์ด treeshakable ์ด๊ณ  ์ผ๋ฐ˜์ ์œผ๋กœ ํฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋กœ ๋ณด์ด์ง€ ์•Š๋Š” ๊ฒƒ์„ ๋ณด๋ฉด ์ด์ œ date-fns ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค.
๋˜ํ•œ ๋‚ ์งœ ๋ฐ ์‹œ๊ฐ„ ์ˆ˜ํ•™์€ ํด๋ผ์ด์–ธํŠธ ์‹œ๊ฐ„๋Œ€ ๋“ฑ์„ ์ฒ˜๋ฆฌํ•  ๋•Œ ๋งŽ์€ ๊ธฐ๋ณธ ์ง€์›์ด ์žˆ๋”๋ผ๋„ ์ •๋ง ์–ด๋ ค์šธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ ์งœ ์„ ํƒ๊ธฐ์— ๋Œ€ํ•œ PR ์ดˆ์•ˆ์„ ์ด๋ฏธ ์ž‘์„ฑํ–ˆ๋‹ค๋Š” ๊ฒƒ์„ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ตฌ์„ฑ ์š”์†Œ์™€ ๊ด€๋ จํ•˜์—ฌ ์ œ์•ˆํ•  ์ˆ˜ ์žˆ๋Š” API๊ฐ€ ์ด๋ฏธ ์žˆ์Šต๋‹ˆ๊นŒ?

Intl.DateFormat : ๋‚ด๊ฐ€ ์ง€๊ธˆ ์šฐ์—ฐํžˆ ๋ฐœ๊ฒฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์˜ ๊ฒฝ์šฐ ๋Œ€์ฒด๋ฅผ ์‰ฝ๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์ง€๋งŒ ์‚ฌ์šฉ์ž ์ง€์ • ๋‚ ์งœ/์‹œ๊ฐ„ ๊ณ„์‚ฐ์ด ์–ด๋ ค์šธ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฐ ๋™์˜ํ•ฉ๋‹ˆ๋‹ค.

์ด PR์€ wip์ด๋ฉฐ ๋‚˜๋Š” ์•„์ง ๊ทธ๋Ÿฌํ•œ ์„œ๋น„์Šค๊ฐ€ ํ•„์š”ํ•œ ์ž‘์—…์„ ๋‹ค๋ฃจ์ง€ ์•Š์•˜์Šต๋‹ˆ๋‹ค. ์ด ์„œ๋น„์Šค์— ์–ด๋–ค ๊ธฐ๋Šฅ์ด ํ•„์š”ํ•œ์ง€ ์•„์ง ํ™•์‹คํ•˜์ง€ ์•Š์ง€๋งŒ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜์—ฌ ๊ณ„์† ํ™•์žฅํ•˜๊ฒ ์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„๋Œ€

์ตœ๊ทผ์— ์ด ์š”๊ตฌ ์‚ฌํ•ญ์„ ์‚ญ์ œํ–ˆ์Šต๋‹ˆ๋‹ค. UX ๊ด€์ ์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์„ค๋ช…ํ•˜๊ธฐ ์–ด๋ ค์šด ๋งŽ์€ ์ž‘์ง€๋งŒ ๋ณต์žกํ•œ ์„ธ๋ถ€ ์‚ฌํ•ญ์„ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋‚ ์งœ ์กฐ์ž‘ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ

date-fns๋Š” addMonth , getDaysInMonth , isToday , startOfTheWeek ๋“ฑ๊ณผ ๊ฐ™์€ ์‹œ๊ฐ„ ์ด๋™ ์ž‘์—…์„ ์œ„ํ•œ ํ™˜์ƒ์ ์ธ API์ž…๋‹ˆ๋‹ค. . ์•„๋งˆ๋„ ์–ด๋Œ‘ํ„ฐ ์ถ”์ƒํ™”๋งŒํผ ๋งŽ์€ ๋น„์šฉ์ด ๋“ค ๊ฒƒ์ž…๋‹ˆ๋‹ค.

๋ฐ˜๋ฉด์—, ๋„์„œ๊ด€ ์†Œ๋น„์ž๋Š” ์ˆœ๊ฐ„์ด๋‚˜ luxon์ด ์žˆ์„ ๋•Œ date-fns ๋ฅผ ํฌํ•จํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ์—‡๊ฐˆ๋ฆฐ ๊ฐ์ •์„ ๊ฐ€์งˆ ๊ฒƒ์ž…๋‹ˆ๋‹ค. -> Here ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์œ ์šฉํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์šด์ด ์ข‹๊ฒŒ๋„ date-fns ๋ฅผ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ๋ฌธ์ œ๊ฐ€ ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.

์‹œ๊ฐ„ ์˜์—ญ์— ๋Œ€ํ•œ ์ฐธ๊ณ  : date-fns ๋‹น์‹ ์ด (์‹ฌ์ง€์–ด ์ „์ฒด ์‹œ๊ฐ„๋Œ€ ์ง€์›์„ ๊ตฌํ˜„ํ•˜๊ธฐ ์œ„ํ•ด ์ข‹์•„ํ•˜๋Š” ๊ฒƒ์ด๋‹ค ๊ฒฝ์šฐ์— ์ ํ•ฉํ•˜์ง€ ์•Š์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค date-fns-tz ์žˆ๋Š” ํ•ด๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ๋ฌธ์ œ๋Š” ๋ฌธ์ œ๋ฅผ ๋ถ„์„ / ํฌ๋งท์„,ํ•˜์ง€๋งŒ ๋‚ ์งœ ์กฐ์ž‘ ์‹œ๋‚˜๋ฆฌ์˜ค ). ์ตœ๊ทผ์— ์šฐ๋ฆฌ๋Š” ์ด๋Ÿฌํ•œ ๋ชฉ์ ์„ ์œ„ํ•ด luxon ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ–ˆ์Šต๋‹ˆ๋‹ค. ์ตœ์†Œํ•œ ์ž„์‹œ ์‚ฌ์–‘ ์ด ์™„๋ฃŒ๋˜์ง€ ์•Š๊ณ  ๋ธŒ๋ผ์šฐ์ €์—์„œ ์ฑ„ํƒ๋  ๋•Œ๊นŒ์ง€์ž…๋‹ˆ๋‹ค.

์„œ์‹

  • Angular Material datepicker๊ฐ€ ๋‹จ์ˆœํžˆ DetePipe๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ์ด์œ ๋ฅผ ์•Œ๊ณ  ์žˆ์Šต๋‹ˆ๊นŒ?
  • Intl.DateFormat ์—์„œ ๋ˆ„๋ฝ๋œ ๋ฒ”์œ„ ํ˜•์‹ : ์•„๋งˆ๋„ ์šฐ๋ฆฌ ์ž์‹ ์˜ ํด๋ฐฑ์„ ๊ตฌํ˜„ํ•˜๊ฑฐ๋‚˜ ํด๋ฆฌํ•„์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์„๊นŒ์š”? ์ œํ’ˆ์—์„œ ์šฐ๋ฆฌ๋Š” ์ด๋ฏธ ๋ฌด์–ธ๊ฐ€๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์„œ์‹ ์ง€์ •์— DetePipe๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๊ฒฝ์šฐ ํ…์ŠคํŠธ ๋ฒˆ์—ญ ๋ฐฉ์‹์„ ์ œ์–ดํ•˜๊ธฐ ์œ„ํ•ด LOCALE_ID ํ† ํฐ์„ ์ง€์›ํ•˜๋Š” ๊ฒƒ์ด ์ข‹์Šต๋‹ˆ๋‹ค.

@piotrl ๊ฐ์‚ฌ

๋‚ด๊ฐ€ ์ดํ•ดํ•˜๋Š” ํ•œ DatePipe๋Š” ์ตœ์ข…์ ์œผ๋กœ ์„ ํƒํ•œ ๋‚ ์งœ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ฐ๋งŒ ์œ ์šฉํ•˜์ง€๋งŒ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๊ฒƒ์„ ๊ณ„์‚ฐ/ํ‘œ์‹œํ•  ๋•Œ๋Š” ์œ ์šฉํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ํŠน์ • ์›”์˜ ๋ชจ๋“  ๋‚ .

๋‚ด๊ฐ€ ๋ชจ๋“  ์˜๊ฒฌ์„ ์ฝ์„ ๋•Œ, ๋‚˜๋Š” ์šฐ๋ฆฌ๊ฐ€ ์–ด๋Œ‘ํ„ฐ ๊ฐœ๋…์ด ๊ฐ€์•ผ ํ•  ๊ธธ์ด๋ผ๋Š” ๋ฐ ๋™์˜ํ•  ์ˆ˜ ์žˆ๋‹ค๊ณ  ์ƒ๊ฐํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ํ•ฉ์˜ํ•  ์†”๋ฃจ์…˜์— ๋”ฐ๋ผ ๊ธฐ๋ณธ, date-fns ๋˜๋Š” luxon ์šฉ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. @piotrl์ด ์–ธ๊ธ‰ํ–ˆ๋“ฏ์ด ์ด๊ฒƒ์€ ์†Œ๋น„์ž๊ฐ€ ์ž์ฒด ๋‚ ์งœ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒฝ์šฐ ์ƒˆ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ๋„ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค.

@ffriedl89 @tomheller ๋‹น์‹ ์˜ ์ƒ๊ฐ์€?
@piotrl : ์šฐ๋ฆฌ๊ฐ€ ๋‚ ์งœ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๋„ ๊ทธ๊ฒƒ์„ ์ค‘์•™ ๋‚ ์งœ ์ง„์ž…์ ์œผ๋กœ ์‚ฌ์šฉํ• ๊นŒ์š”? ๋˜ํ•œ ์ด ์ฃผ์ œ์— ๋Œ€ํ•ด ๋งŽ์€ ์ „๋ฌธ ์ง€์‹์„ ๊ฐ–๊ณ  ๊ณ„์‹œ๊ธฐ ๋•Œ๋ฌธ์— ์ €๋ฅผ ์ง€์›ํ•ด ์ฃผ์‹ ๋‹ค๋ฉด ์–ผ๋งˆ๋‚˜ ์ข‹์„๊นŒ์š”?

๋˜ ๋‹ค๋ฅธ ๊ธ์ •์ ์ธ ๋ถ€์ž‘์šฉ์€ ์šฐ๋ฆฌ๊ฐ€ ์žฌ๋ฃŒ ๋‚ ์งœ ์–ด๋Œ‘ํ„ฐ์˜ API์— ๋ฐ€์ ‘ํ•˜๊ฒŒ ๋ถ™์–ด ์žˆ๊ณ  ๊ทธ๋“ค์ด ๊ทธ๊ฒƒ์„ cdk๋กœ ์˜ฎ๊ธฐ๋ฉด ์‰ฝ๊ฒŒ ์ ์‘ํ•˜๊ณ  ๋ณ€๊ฒฝํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

@areknow

์‹œ๊ฐ„๋Œ€๋ฅผ ์ œ์–ดํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ข‹์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค. spine X์˜ ์ผ๋ถ€ ์‚ฌ์šฉ ์‚ฌ๋ก€์—๋Š” ํŠน์ • ๋ ˆ๊ฑฐ์‹œ API์™€ ์ƒํ˜ธ ์ž‘์šฉํ•˜๊ธฐ ์œ„ํ•ด UTC๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

datepicker๊ฐ€ ๋‚ ์งœ๋ฅผ ์–ด๋Œ‘ํ„ฐ๊ฐ€ ์ œ๊ณตํ•˜๋Š” ์ผ๋ฐ˜ ๊ฐ์ฒด๋กœ ์ทจ๊ธ‰ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ๋‚ ์งœ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ์ด ์š”๊ตฌ ์‚ฌํ•ญ๋„ ํ•ด๊ฒฐ๋ฉ๋‹ˆ๋‹ค. ์ด๊ฒƒ์€ ๊ธฐ๋ณธ ๋‚ ์งœ, ์ˆœ๊ฐ„ ๋ž˜ํผ ๋˜๋Š” ํ•ญ์ƒ ํŠน์ • ์‹œ๊ฐ„๋Œ€๊ฐ€ ์žˆ๋Š” ๋‚ ์งœ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ ์งœ ์–ด๋Œ‘ํ„ฐ๋ฅผ ๊ตฌํ˜„ํ•˜๋ฉด ํด๋Ÿฌ์Šคํ„ฐ๋„ ์ด๋ฅผ ์ค‘์•™ ๋‚ ์งœ ์ง„์ž…์ ์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๊นŒ?

๋‚˜๋Š” ๊ทธ๊ฒƒ์„ ๊ณ ๋ คํ•˜๊ธฐ ์œ„ํ•ด ์—ด๋ ค ์žˆ์Šต๋‹ˆ๋‹ค. ๋‚ด ์ดˆ๊ธฐ ์ƒ๊ฐ: Raw Date ๊ฐœ์ฒด๋Š” ์ด๋ฏธ 600๊ฐœ ์ด์ƒ์˜ ์žฅ์†Œ์—์„œ ์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค(๋ช…์‹œ์ ์œผ๋กœ, ์•”์‹œ์  ์‚ฌ์šฉ์„ ๊ณ„์‚ฐํ•  ์ˆ˜ ์—†์Œ).

๋Œ€๋ถ€๋ถ„์˜ ์‚ฌ์šฉ์€ ์–ด์จŒ๋“  ์บ˜๋ฆฐ๋”์— ์—ฐ๊ฒฐ๋˜๊ฑฐ๋‚˜ ์บ˜๋ฆฐ๋”์— ๊ฐ€๊น์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์‚ฌ์šฉ๋ฒ•์„ ์ฐพ์„ ๋•Œ ์ผ๋ฐ˜์ ์œผ๋กœ ๋‚ ์งœ๋Š” ๋ฐฑ์—”๋“œ์—์„œ ๊ฐ€์ ธ์˜ค๊ณ  ํ˜•์‹ ์ง€์ •์„ ์œ„ํ•ด ์•ฝ๊ฐ„ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค. ์บ˜๋ฆฐ๋”์™€์˜ ์ผ๊ด€์„ฑ์„ ์œ„ํ•ด์„œ๋งŒ ์ด๋Ÿฌํ•œ ์‚ฌ์šฉ ์‚ฌ๋ก€์— ์–ด๋Œ‘ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์€ ์••๋„์ ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๊ทธ๋ž˜์„œ ๋‚˜๋Š” ๋‹ฌ๋ ฅ์„ ์‚ฌ์šฉํ•  ๋•Œ๋งˆ๋‹ค ๊ธฐ๋ณธ ๋‚ ์งœ์—์„œ ์–ด๋Œ‘ํ„ฐ๋กœ์˜ ์ž‘์€ ๋ณ€ํ™˜์„ ๊ณ ๋ คํ•  ๊ฒƒ์ž…๋‹ˆ๋‹ค(์–ด๋Œ‘ํ„ฐ๊ฐ€ @Input ๋กœ ํ•„์š”ํ•œ ๊ฒฝ์šฐ).

๋”ฐ๋ผ์„œ ์–ด๋Œ‘ํ„ฐ๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ๊ฒฐ์ •ํ•œ ๊ฒฝ์šฐ ์—ฌ์ „ํžˆ 2๊ฐ€์ง€ ๋ฐฉ๋ฒ•์ด ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ๋‚ด๋ถ€ ๋‹ฌ๋ ฅ ๋‚ ์งœ ์ž‘์—…์— ๋Œ€ํ•ด์„œ๋งŒ ๋ชจ๋“ˆ ๊ตฌ์„ฑ์— ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ๋ชจ๋ธ(์ž…๋ ฅ/์ถœ๋ ฅ)์€ ์—ฌ์ „ํžˆ โ€‹โ€‹๊ธฐ๋ณธ ๋‚ ์งœ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•ฉ๋‹ˆ๋‹ค.
  2. ๋‚ด๋ถ€ ์‚ฌ์šฉ + ์ž…์ถœ๋ ฅ API ๋ชจ๋‘์— ์–ด๋Œ‘ํ„ฐ๋ฅผ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค.

๋‘ ๋ฒˆ์งธ ์˜ต์…˜์€ ์ƒ๊ฐํ•ด์•ผ ํ•  ์‚ฌ์šฉ ์‚ฌ๋ก€ ์ธก๋ฉด์—์„œ ๋” ์นจ์Šต์  ์ด๋ฉฐ ์–ด๋Œ‘ํ„ฐ์˜ ์ž˜ ์ƒ๊ฐํ•œ API๊ฐ€ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.
์ฒซ ๋ฒˆ์งธ ์˜ต์…˜์€ ์‹œ์ž‘ํ•˜๊ธฐ ๋” ์‰ฌ์šธ ์ˆ˜ ์žˆ์œผ๋ฉฐ ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋‘ ๋ฒˆ์งธ ์˜ต์…˜์œผ๋กœ ๋ฐœ์ „ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

APM-266081๋กœ ์ด๋™

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰