์ด์ ๋ํด ๋ง์ ๋ ผ์ ๊ฐ ์์์ต๋๋ค. ์ ์์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
utc
, local
, zone
, add
, subtract
, startOf
๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ค์ ๋ฉ์๋๋ 3.0.0์์ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. endOf
, lang
, duration
. add
, subtract
๋ฐ lang
.
์ฒ์์๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ด methodNameMute
๋ณํ์ผ๋ก ๋ณต์ ๋ฉ๋๋ค. methodNameImmute
๋ผ๋ ๋ถ๋ณ ๋ณํ๋ ํ์ํฉ๋๋ค. 3.0๋ถํฐ ํ๋ฒํ ์ด์ ๋ฐฉ๋ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก immutable ์ต์
์ ์ฌ์ฉํ๊ธฐ ์์ํฉ๋๋ค.
๋ ผ๋์ ์ฌ์ง๊ฐ ์๋ ๊ฒ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
lang
๋ณ๊ฒฝํ ์ ์๊ฒ ๋ง๋ค์ด์ผ ํฉ๋๋ค.get
/ set
)๋ ๋ณ๊ฒฝํ ์ ์๊ฒ ๋ง๋ค์ด์ผ ํฉ๋๋ค.์ข์ ๋ถ๋ถ์ ์ฐ๋ฆฌ๊ฐ ์ค๋ ๋ฉ์๋์ ๋ถ๋ณ ๋ฒ์ ์ ๋ง๋ค๊ณ ๋์ค์ ๋ฌด์์ ํ ์ง ๊ฒฐ์ ํ ์ ์๋ค๋ ๊ฒ์
๋๋ค. ์ ํํ๋ฉด 3.x
๊ฐ ์ข
๋ฃ๋ ํ์๋ 2.x
๋ถ๊ธฐ๊ฐ ๊ฝค ์ค๋ซ๋์ ์กด์ฌํ๊ฒ ๋ฉ๋๋ค.
@icambron @timrwood @gregwebs @yang @lfnavess @soswow @langalex
์ 2์ผํธ๋ ์ฐ๋ฆฌ๊ฐ ์์ ํ ๋ถ๋ณ์ฑ์ ์ถ๊ตฌํ๊ฑฐ๋ ์์ ํ์ง ๋ง์์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ์ผ๋ถ ๋ฉ์๋๋ ๋ณ๊ฒฝํ ์ ์๊ณ ( startOf
, add
) ์ผ๋ถ ๋ฉ์๋๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค( year
, get
). ์ด๋ ๊ฒ์ด ์ด๋ ๊ฒ์
๋๋ค.
๋ํ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ชจ๋ ๊ฒ์ ์ ํธํฉ๋๋ค. getter๋ ์ด๋ฏธ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ์ง ์์ต๋๊น?
๋ค์์ ๋ถ๋ณ์ฑ์ผ๋ก ์ ํํ ๋ ๋ณผ ์ ์๋ ํฐ ๋ฌธ์ ์ ๋๋ค.
์๋ฐ์คํฌ๋ฆฝํธ์ ํน์ฑ์ ์ฐ๋ฆฌ๋ ์ง์ ํ ๋ถ๋ณ์ฑ์ ๊ฐ์ง ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๊ฐ ํ ์ ์๋ ์ต์ ์ ๋ณต์ฌ๋ณธ์ ๋ง๋ ๋ค์ ๊ทธ ๋ณต์ฌ๋ณธ์ ๋ณ๊ฒฝํ๊ณ ๋ฐํํ๋ ๊ฒ์
๋๋ค. ์ฐ๋ฆฌ๋ ๋ชจ๋ public ๋ฉ์๋๋ฅผ ์กฐ์ฌ์ค๋ฝ๊ฒ ๋ํํ์ฌ ๋จ์ํ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ์๋๋ผ ํญ์ ๋ณต์ฌํ๊ณ ๋ณ๊ฒฝํ๋๋ก ํ ์ ์์ง๋ง ๋๊ตฐ๊ฐ๊ฐ m._d = new Date()
๋๋ m._d.setHours(1)
ํ๋ ๊ฒ์ ๋ง์ง๋ ๋ชปํฉ๋๋ค.
@icambron์ ๋์ํฉ๋๋ค. ๋ถ๋ณ์ผ๋ก ์ด๋ํ๋ฉด ์์ ํ ๋ณ๊ฒฝ์ด ๋์ด์ผ ํฉ๋๋ค. ์๊ฐ์ ์์ฑ์ ๋ณ๊ฒฝํ ์ ์๋ ๋ชจ๋ ๋ฐฉ๋ฒ์ ๋์ ์๊ฐ์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค๊ณ ๋์ ๋ณต์ฌ๋ณธ์ ๋ณ๊ฒฝํฉ๋๋ค.
์์ฌ ๋ถ๋ณ์ฑ์ผ๋ก ์ ํํ ๋์ ๋ถํํ ์ ์ ๋ณ๊ฒฝ์ฑ์ ๊ณ์ ์ง์ํ๋ ค๋ฉด ๋ง์ ์ API๋ฅผ ๋ง๋ค์ด์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค.
์ด์ ์๋ ์๊ฐ ๋ณํ์์ ์๊ฐ ๋ณต์ ๋ฐ ๋ณํ์ผ๋ก ์ ํํ๋ ๊ฒ์ด ์ฌ๋ฐ๋ฅธ ์์น์ .clone()
๋ฅผ ์ถ๊ฐํ๋ ๊ฒ๋งํผ ๊ฐ๋จํ์ต๋๋ค. ์ด์ ์ฐ๋ฆฌ๋ ๋ชจ๋ setter์ ๋ํด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ธํฐํ์ด์ค๋ฅผ ์์ฑํด์ผ ํ๋ฉฐ, ์ด๋ API ํ๋ฉด์ ์ ์๋นํ ์ถ๊ฐ๋ฉ๋๋ค.
์ฌ๊ธฐ์๋ ~20๊ฐ์ setter ๋ฉ์๋, add/subtract, local/utc/zone/tz, startOf/endOf, lang ๋ฐ ํ์ฌ ํ๋ฌ๊ทธ์ธ์์ ์ฌ์ฉ๋๋ ๊ธฐํ ๋ฉ์๋๊ฐ ํฌํจ๋ฉ๋๋ค.
์ด์ ๊ฐ์ ๋ณ๊ฒฝํ ๋๋ง๋ค ๋ณต์ฌ๋ณธ์ ์์ฑํ๊ธฐ ๋๋ฌธ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ด ์ฆ๊ฐํฉ๋๋ค. ๋ฌผ๋ก ์๋ก์ด ์๊ฐ์ ๊ฐ๋น์ง ์์ง๋์ง๋ง ์ด ๋ณ๊ฒฝ๊ณผ ๊ด๋ จ๋ ์ถ๊ฐ ๋น์ฉ์ ์ผ๋์ ๋์ด์ผ ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ๋ค๋ฅธ setter๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ผ๋ก ์ผํ์ฉ ํด๋ก ์ ์์ฑํ์ง ์๋๋ก ๋ง์ ์ฃผ์๋ฅผ ๊ธฐ์ธ์ฌ์ผ ํฉ๋๋ค.
์ด๋ค ๋ฉ์๋๊ฐ ํธ์ถ๋๋์ง ์ถ์ ํ๊ธฐ ์ํด ์ด ์์ ํจ์ ๋ํผ๋ฅผ ์ฌ์ฉํ์ต๋๋ค.
for (var method in moment.fn) {
moment.fn[method] = (function (fn, method) {
return function () {
console.log(method);
return fn.apply(this, arguments)
}
})(moment.fn[method], method)
}
์ด์ ๋ฉ์๋๋ฅผ ์คํํ ๋ ํ๋กํ ํ์ ์ ๋ค๋ฅธ ๋ฉ์๋๊ฐ ์ด๋ป๊ฒ ์ฌ์ฉ๋๋์ง ๋ณผ ์ ์์ต๋๋ค. ์ด ๋ชจ๋ ๋ฐฉ๋ฒ์ด ์๊ฐ์ ๋ณต์ ํ ํ์๋ ์์ผ๋ฏ๋ก ๋ณต์ ๊ฐ ํ์ํ ๋ฐฉ๋ฒ์ ๋ํ ์ค๋ช ์ ์ถ๊ฐํ์ต๋๋ค.
moment().isSame(moment(), 'year')
isSame
clone // clone
startOf // clone
month // clone
date // clone
year // clone
date // clone
hours // clone
minutes // clone
seconds // clone
milliseconds // clone
valueOf
local // clone
zone // clone
startOf // clone
month // clone
date // clone
year // clone
date // clone
hours // clone
minutes // clone
seconds // clone
milliseconds // clone
valueOf
์ฆ 21๊ฐ์ ์ฌ๋ณธ์ด ์์ฑ๋ ํ ์ฆ์ ํ๊ธฐ๋ฉ๋๋ค. ๋ถ๋ช ํ ๋ณ๊ฒฝํ ์ ์๊ณ ๋ณ๊ฒฝํ ์ ์๋ ๋ฒ์ ๋ง ๋ ธ์ถํ๋ ์ผ๋ถ ๋ด๋ถ ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ ์ด๋ฅผ ์ต์ ํํ ์ ์์ง๋ง ๋ณต์ ๊ฐ ํ์ํ ์๊ฐ๊ณผ ๊ทธ๋ ์ง ์์ ์๊ฐ์ ๊ธฐ๋กํ๊ธฐ ์ํด ๋ด๋ถ ๋ณต์ก์ฑ์ ํฌ๊ฒ ์ถ๊ฐํ ๊ฒ์ ๋๋ค.
์๊ฐ์ ๋ณต์ ํ๋ ๊ฒ์ ์๊ฐ์ ๋ณ๊ฒฝํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋๋ฆฝ๋๋ค. ์ด๋ฅผ ์ํด ๋ช ๊ฐ์ง jsperf ํ ์คํธ๋ฅผ ํจ๊ป ํ์ต๋๋ค.
http://jsperf.com/moment-cloning
http://jsperf.com/moment-cloning-2
๋๋ ๋ ๋ฒ์งธ ํ ์คํธ๊ฐ ์์ฌ ๋ถ๋ณ์ฑ์ผ๋ก ์ ํํ ๋ ์ฑ๋ฅ ์์ค์ ํจ์ฌ ๋ ์ ํํํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๊ฒฐ๊ณผ์ ์์์ ์ธ๊ธํ 21๊ฐ์ ๋ณต์ ์ธ์คํด์ค๋ฅผ ๊ณฑํ๋ฉด ์คํ ์๊ฐ์ด ํจ์ฌ ๋๋ ค์ง๋๋ค.
์๊ฐ ๋ณต์ ๋ฅผ ์ํด ๊ฒฝ๋ก๋ฅผ ์ต์ ํํ ์ ์๋ค๊ณ ํ์ ํ์ง๋ง ๋น์ทํ ์ฑ๋ฅ์ ์ป์ผ๋ ค๋ฉด ์๋๋ฅผ 50๋ฐฐ ๋ โโ๋น ๋ฅด๊ฒ ๋ง๋ค์ด์ผ ํฉ๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ถ๊ฐ๋ฅํ๋ค๊ณ ํ์ ํฉ๋๋ค.
๋ถ๋ณ์ฑ์ผ๋ก ์ ํํ๋ฉด ๋ด๋ถ ๋ฐ ์ธ๋ถ API์ ๋ณต์ก์ฑ์ด ํฌ๊ฒ ์ฆ๊ฐํ๊ณ ์ฃผ์ ์ฑ๋ฅ ๋ฐ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋๋ ๊ทธ ๋น์ฉ์ด ๋ถ๋ณ์ฑ์ด ์ ๊ณตํ๋ ์ด์ ์ ๊ฐ์น๊ฐ ์๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
์ฌ๊ธฐ์ ๋์ด๋ ์ฑ๋ฅ ๋ฌธ์ ๊ฐ ์์ ์ ๋์น๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋์ฐ๋ณ์ด๋ฅผ ์ํํ๊ธฐ ์ ์ ์ ํ์ฑ์ ๋ณด์ฅํ๊ธฐ ์ํด ์ด๊ธฐ .clone()์ด ํ์ํฉ๋๋ค.
ํ์ฌ API์์ clone()์ด ํ์ํ์ง ์์ ๊ฒ์ฒ๋ผ ๊ฐ์ฅํ ์ ์์ต๋๋ค. ์ฌ๊ธฐ์ ๋ค๋ฅธ ์ฃผ์ ์ฌ๋ก๋ ๋ค์ค ์์ฐจ์ ๋์ฐ๋ณ์ด๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค. ์ด ๊ฒฝ์ฐ๋ ๋ชจ๋ ๋์ฐ๋ณ์ด๊ฐ ๋จ์ผ ํด๋ก ์์ ๋์ฐ๋ณ์ด๋ก ์ํ๋๋๋ก ๋น๋ API๋ฅผ ์์ฑํ์ฌ ํด๊ฒฐ๋ฉ๋๋ค.
๋ค๋ฅธ ์ผ๋ฐ์ ์ธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ๋๋ฝ๋์์ต๋๊น?
๋ด ์๋ ๋ฌธ์ ๋ startOf
๋ฐ endOf
๋ฉ์๋์ ๊ดํ ๊ฒ์ด์์ต๋๋ค. ์ด๋ค ์ด์ ์์์ธ์ง ์ด ์ด๋ฆ์ "์ด ์๊ฐ์ ํ ๋ฌ์ ์์์ผ๋ก ์ค์ "์ด ์๋๋ผ "ํ ๋ฌ์ ์์"๊ณผ ๊ฐ์์ต๋๋ค. add
๋ฐ subtract
add
์ ๊ฐ์ ๋ฉ์๋๋ ์๋ฏธ๋ก ์ ์๋ฏธ์์ ์๋ฒฝํ๊ฒ ๊ด์ฐฎ์ต๋๋ค. ์๋ก ๋ง๋ค์ง ์๊ณ ๊ฐ์ฒด์ ๋ฌด์ธ๊ฐ๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ ์๋ฒฝํฉ๋๋ค.
๊ฐ์ธ์ ์ผ๋ก toStartOf
๋ฐ toEndOf
์ ๊ฐ์ startOf
๋ฐ endOf
๋ฉ์๋ ์ด๋ฆ์ toEndOf
(์: "์ด ์๊ฐ์ ํ ๋ฌ์ ์์์ผ๋ก ์ด๋")์ผ๋ก ๋ณ๊ฒฝํ๋ฉด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ฉ๋๋ค. ๋ฌธ์ . ์ํธ
@gregwebs ์ฃ์กํฉ๋๋ค. ์์ set
์๋ฏธํ์ต๋๋ค.
@soswow์ ๋์ํ์ง ์์ต๋๋ค. ์ผ๊ด์ฑ์ด ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ฌ์ค toStartOf
๋ toISOString
๋์ฒด ํ๋ ์ ํ
์ด์
์ ์ ๊ณตํ๋ ๊ฒ์ฒ๋ผ ๋ถ๋ณ์ฑ์ ํจ์ฌ ๋ ๊ฐ๋ ฅํ๊ฒ ์์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ ์ค์ํ ๊ฒ์ "Moments setters๋ moment๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค" ๋๋ "Moments setters๋ ๋ณต์ฌ๋ณธ์ ๋ฐํํฉ๋๋ค"์ ๊ฐ์ ์ง์ ์ ํ ์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@timrwood ์ ์ฐ๋ ค ์ฌํญ:
JS ๊ฐ์ฒด๊ฐ ์ง์ ์ผ๋ก ๋ถ๋ณํ์ง ์์ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ๋๋ฅผ ๊ดด๋กญํ์ง ์์ต๋๋ค. ์์ ์ API๊ฐ ๋ณ๊ฒฝํ ์ ์๋ ๊ณ์ฝ์ ์ ๊ณตํ๋ค๋ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก ์ฌ์ฉ์๋ ๋ฐ์ค ์น ์์ฑ์ ์กฐ์ํ์ฌ ์์ผ ์ ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก ๋ถ๋ณ์ฑ์ด ์์ ์ ์ํํ๋ ์ฃผ์ ๋ฐฉ๋ฒ์ธ ์ธ์ด์์๋ ์์์๊ฐ ๊ฐ๋ฅํฉ๋๋ค.
ํ๋ฉด์ ๋ฐ ์ฑ๋ฅ์ ๋ํด: CPU์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ชจ๋ ์ฌ์ฉํ์ง ์์ผ๋ ค๋ฉด ๋ด๋ถ์ ์ผ๋ก mutator๋ฅผ ์ฌ์ฉํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค[1]. ๊ทธ๋ฌ๋ฉด ์ด๋ ์ ๋ ์ง์ํด์ผ ํ ๊ฒ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ setYear()
๋ฑ๊ณผ ๊ฐ์ด ์ธ๋ถ์ ๋
ธ์ถํ ์๋ ์์ต๋๋ค. ์ด๋ ๊ฒ ํ๋ฉด ํ๋ฉด์ ์ด ๋ง์ด ์ถ๊ฐ๋์ง๋ง ์ค์ ๋ก ๋ณต์ก์ฑ์ด ๋ง์ด ์ถ๊ฐ๋์ง๋ ์์ต๋๋ค. ๋น๋ช
์์ ๋์ฐ๋ณ์ด์์ ๊ฒฝ์ฐ ์ธ๋ถ์ ์ผ๋ก ๋ณต์ ํ๊ณ ๋ด๋ถ์ ์ผ๋ก ๋์ฐ๋ณ์ดํฉ๋๋ค.
์ด๋ฅผ ๋ณด๋ ํ ๊ฐ์ง ๋ฐฉ๋ฒ์ ์ฌ์ฉ์๊ฐ ์์ ์ ์ฝ๋์์ ๋ณต์ ํด์ผ ํ๋ฏ๋ก Moment๊ฐ ์ฌ์ฉ์๋ฅผ ๋์ ํ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ์ด๋ ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ์์น์์ ์ฐ๊ฒฐํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ์ด๋ ๋น๋ ์ธํฐํ์ด์ค(Greg์ ์์ด๋์ด์ ๋ฐ๋ผ) ๋๋ ์ฌ์ฉ์๊ฐ ๊ฑฐ๊ธฐ์์ ๋ณ๊ฒฝ์๋ฅผ ์ฌ์ฉํ๊ฒ ํจ์ผ๋ก์จ ์ธ์ธ ์ ์์ต๋๋ค. ๋น๋๋ ๋ณต์กํจ์ ์ถ๊ฐํฉ๋๋ค[2]. ๊ทธ๋์ ์ ๋ ๋ช ์์ mutator ๋์์ ์ ํธํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฒฝ์ฐ Moment๋ ์ฑ๋ฅ์ ๋ฏผ๊ฐํ ์ํฉ์์ ์ฌ์ฉ๋์ง ์๋ ๊ฒ์ด ํ์ค์ด๋ฏ๋ก ๊ทธ๋ฌํ ์ํฉ์ด API ์ธก๋ฉด์์ ๊ฐ์ฅ ํธ๋ฆฌํ ํ์๋ ์์ต๋๋ค. ํ์ํ ๋ ์ฑ๋ฅ ํด์น๊ฐ ์๋ ๋ฉ์ง ๋ถ๋ณ API๋ฅผ ์ฌ์ฉํ๊ณ ์ถ์ต๋๋ค.
[1] FP ๋๋์ ๋ฉ์ง ์์ด๋ค์ _๊ตฌ์กฐ์ ๊ณต์ _๋ก ์ด ๋ฌธ์ ๋ฅผ ํด๊ฒฐํ์ง๋ง ์ฌ๊ธฐ์์๋ ์๋ง๋ ๋นํ์ค์ ์ผ ๊ฒ์ ๋๋ค.
[2] ์ ํต์ ์ผ๋ก ์ฌ๋๋ค์ ๋ณ๋์ ๊ฐ์ฒด์ธ ๋น๋๋ฅผ ๋ง๋ค์ง๋ง ์ ์ฒด setter API๋ฅผ ๋ณต์ฌํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ฌ๊ธฐ์์๋ ์ ๋ง ์ฅํฉํฉ๋๋ค. ๊ทธ๋ฅ ๋ฑ์ด๋ด์ง๋ง ํ ๊ฐ์ง ๋์์ .chain()
๊ฐ isBuilding
ํ๋๊ทธ๊ฐ ์ค์ ๋ ๋ณต์ ์๊ฐ์ ์์ฑํ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ๋ด๋ถ ํด๋ก ์ ๋ฌด์๋๊ณ ๋์ฐ๋ณ์ด๋ฅผ ์ํด ๊ฐ์ฒด๋ฅผ ๋ฐํํฉ๋๋ค. ๊ทธ๋ฐ ๋ค์ build()
ํ๋๊ทธ๋ฅผ ์ค์ ํด์ ํ๊ณ ํด๋น ๋ณต์ ๋ณธ์ ๋ฐํํฉ๋๋ค. ๋ฌธ์ ๋ ๊น๋ฐ์ด ์ค์ ๋๋ฉด ๊ฒํฐ๊ฐ ํผ๋น๋ฆฐ๋ด ๋๋ ์ด์ธ์ ์ธ์ณ์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. ๊ทธ๋ ์ง ์์ผ๋ฉด ์ฌ๋๋ค์ด ๊ฐ์๊ธฐ ๋์ฐ๋ณ์ด๊ฐ ๋๋ ์ฐ๊ฒฐ๋์์ง๋ง ๊ตฌ์ถ๋์ง ์์ ์๊ฐ์ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์
๋๋ค. ๊ทธ๋ฐ ๋ค์ ์ธ๋ถ ๋ฐ ๋ด๋ถ์ ์ผ๋ก ํธ์ถ๋๋ ๊ฒํฐ๋ฅผ ๊ตฌ๋ณํด์ผ ํฉ๋๋ค. ๋ธ๋ ํ. ๋ ๋ค๋ฅธ ๋์์ ๋น๋๊ฐ ํ์๋ก ํ๋ ๊ธฐ๋ฅ์ ๋ด๋ถ์ ์ผ๋ก ๋ฏน์ค์ธ์ผ๋ก ๋ถํดํ์ฌ ๋น๋์ Moment ๋ชจ๋์์ ์ฌ์ฉํ๋ ๊ฒ์ด์ง๋ง ์ฝ๋ ๊ตฌ์ฑ ๊ด์ ์์๋ ์๋ํ์ง ์์ ์ ์์ต๋๋ค.
๋์๊ฒ ํจ๊ณผ๊ฐ ์์๋ ๊ฒ์ ํจ์์ ์ถ๊ฐ ๋งค๊ฐ ๋ณ์๋ฅผ ์ถ๊ฐํ๋ ๊ฒ์ด์์ต๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ๋ํ๋ด๋ ํ๋๊ทธ(๋๋ self๋ผ๊ณ ํจ)๋ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ถ๋ณ(๋ณต์ฌ๋ณธ ๋๋ ์ ๊ฐ์ฒด ๋ฐํ)์ด๋ฉฐ, ์ฑ๋ฅ์ ๊ฐ์งํ๋ฉด ํ๋๊ทธ๋ฅผ true๋ก ์ค์ ํฉ๋๋ค.
์ด ์
์ฅ์ ๋ง์ ๊ฐ๋ฑ์ ํด๊ฒฐํ๊ณ ,
๊ฑฐ์ ๋์ผํ ์ฝ๋๋ฅผ ์คํํ๋ ์ ์ฌํ ์ด๋ฆ์ ๊ฐ์ง ํจ์๊ฐ ์๋ ๊ฒฝ์ฐ
๋๋ ์ฑ๋ฅ ํฌ์ธํธ๋ฅผ ๊ฐ์งํ ๋ ํจ์ ์ด๋ฆ๊ณผ ๋งค๊ฐ๋ณ์๋ฅผ ๋ณ๊ฒฝํด์ผ ํฉ๋๋ค.
๋ด ๊ณต๊ฐ ๋ฉ์๋์์ ๋ณต์ฌ๋ณธ์ผ๋ก ํจ์๋ฅผ ํธ์ถํ๋ ์ฝ๋๋ฅผ ์์ํ๊ณ ํ๋๊ทธ๊ฐ true์ธ ๋ค์ ํธ์ถ์ ์์ํฉ๋๋ค.
์ด๊ฒ์ผ๋ก ๋๋ ๋ํ ๊ธฐ๋ฅ์ ์ฐ๊ฒฐํ ์ ์์ต๋๋ค
๋ด ์ฝ๋์์ ๋ฐฐ์ด ๋ฐฐ์ด(์: ํ
์ด๋ธ, ํ ๋ฐฐ์ด)๋ก ์์
ํฉ๋๋ค.
๊ทธ๋์ ๋๋ ์ด์ ์ ๊ฒฐ๊ณผ์ ํจ๊ป ์ ๋ฐฐ์ด์ ๋ค์ ์คํํ๋ ํํฐ๋ง, ํตํฉ ๋ฑ์ ๊ธฐ๋ฅ์ ๊ฐ์ง๊ณ ์์ผ๋ฉฐ ์ต์ข
๊ฒฐ๊ณผ๋ฅผ ์ป๊ธฐ ์ํด ๋์ผํ ๊ธฐ๋ฅ์ ์ฌ๋ฌ ๋ฒ ํธ์ถํ์์ ๊ฐ์งํ์ต๋๋ค. ์ด์ ์ฒซ ๋ฒ์งธ ํธ์ถ์ ๋ณต์ฌ๋ณธ์ ๋ง๋ค๊ณ ๋ณ๊ฒฝํ์ง ์๋ ๊ฒ์
๋๋ค. ์ด๊ธฐ ๋ฐฐ์ด ๋ฐ ๋ค์ ํธ์ถ์์ ๋ด๊ฐ ํ์ํ์ง ์์ ๋์ผํ ๋ฐฐ์ด ์ญ์ ํ์ผ๋ก ์์
ํฉ๋๋ค.
์ฌ๊ธฐ์ ์์ ์ ์๋ ๊ธฐ๋ณธ ์:
moment.add = function(์ธก์ , ๊ธ์ก, ์์ฒด){
}
moment.add = ํจ์(์ธก์ , ๊ธ์ก, ์์ฒด) {
var $moment = ์๊ธฐ ? this : this.clone();
// ์ค์ ์ฝ๋
$ ์๊ฐ ๋ฐํ;
}
2์ผํธ๋ฅผ ์ฃผ์ ๋ชจ๋ ๋ถ๋ค๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค :)
ํ๋กํ ์ฝ์ ๊ฒฝ์ฐ @icambron ์ ๋ชจ๋ ์์ ์ ๋ํ ๋ง์ง๋ง ๊ฒ์๋ฌผ์ ๋์ํฉ๋๋ค.
๋ ๊ฐ์ง ํฐ ์ง๋ฌธ์ด ๋จ์ ์์ต๋๋ค.
๋ ์ฌ์ด ๊ฒ์ ์ API๊ฐ ๋ฌด์์ด์ด์ผ ํ๋์ง, ๋ ๊ฐ์ง ์ต์
์
๋๋ค.
1.1 ๋ค๋ฅธ ์ด๋ฆ์ ๋ฉ์๋(๋ณ๊ฒฝ ๊ฐ๋ฅ ๋ฐ ๋ณ๊ฒฝ ๋ถ๊ฐ) year
/ setYear
, startOf
/ setStartOf
1.2 ๋๋ builder api chain().mutators().build()
, @lfnavess๊ฐ ์ ์ํ
๋น๋ API๋ ํ์คํ ๋ ์น์ํด ๋ณด์ด์ง๋ง ์ค๋ธ์ ํธ๊ฐ ๋น๋ ๋ชจ๋์ ๋๋ฌด ์ค๋ ๋จธ๋ฌด๋ฅด์ง ์๋๋ก ์ฃผ์ํด์ผ ํฉ๋๋ค. ์ด๋ ์ฐ๋ฆฌ์ ์ฌ์ฉ์์๊ฒ ๋ ๋ค๋ฅธ ๋ฌธ์ ์ ์์ธ์ด ๋ฉ๋๋ค.
์ด์ ์ด๋ ค์ด ๋ฌธ์ ๋ ์ ๋ฒ์ ์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์
ํ๋ ๊ฒ์
๋๋ค. ์ฌ๊ธฐ์ ๋ ๊ฐ์ง ์ต์
์ด ์์ต๋๋ค.
2.1 ๊ฐ๋ฐ์๋ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํด์ผ ํฉ๋๋ค(๋ฏธ์น ์ ๊ท์์ 1.1์์ ์๋ํ๊ณ 1.2์์๋ AST ์์ค ์๋ฃจ์
์์ ์๋ํ ์ ์์ -- ์๋ฌด๋ ์์ ์ ๋ฉ์๋ ์ด๋ฆ์ผ๋ก year
๋ฐ month
๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ฉด). python์ ์ด ์ ๊ทผ ๋ฐฉ์์ ์ทจํ์ต๋๋ค. ๊ฒฐ๊ณผ๋ฅผ ๋ชจ๋ ๋ณผ ์ ์์ต๋๋ค. ์์ ํ ์๋ก์ด ์ธ์ด๊ฐ ํ์ํ์ต๋๋ค!
๋น๋ API๋ฅผ ํญ์ ์ผ๋ 2.2 ์ต์
(ํ์ฌ์ ๋์ผ) ๋ฐ ์ ์ฝ๋์ ๋ํด ์ด๋ฅผ ๋นํ์ฑํํ๋ ๋ฐฉ๋ฒ. ์ด๊ฒ์ ๋ _์งํ์ ์ผ๋ก_ ๋ณด์ด์ง๋ง, ์ด๋ก ์ธํด ์ผ๊ธฐ๋ ํผ๋์ ์ ๋๋ ์๋ง๋ ๊ฐ์น๊ฐ ์์ ๊ฒ์
๋๋ค. ๋ชจ๋ ์๊ฐ์๋ ์ด์ ๋ ๊ฐ์ ํ๋๊ทธ๊ฐ ์์ต๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅํ์ง ์ฌ๋ถ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฒฝ์ฐ -- ์๊ฒฉํ๊ฒ ๋ณ๊ฒฝ ๊ฐ๋ฅํ์ง(๊ฒํฐ ์์) ๋๋ ๊ณผ๋๊ธฐ์ ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ์ง(getters ok). ํจ์์์ ๋ชจ๋ฉํธ ๊ฐ์ฒด๋ฅผ ๋ฐ๋ ๊ฒ์ ๋งํ ๊ฒ๋ ์๊ณ , ๋ชจ๋๊ฐ ๋ฌด์์ธ์ง ํ์ธํ๊ณ ์ ์งํด์ผ ํฉ๋๋ค... ์ด ์ผ๋ง๋ ์๋ง์ง์ฐฝ์ธ์ง!
๊ทธ๋ฆฌ๊ณ ์ง๊ธ ๋์๊ฒ ์จ ๋ฏธ์น ์์ด๋์ด
m = moment();
funcIDontTrust(m.clone()); // doesn't actually clone
function funcIDontTrust(m) {
m.year(2005); // perform the clone here
console.log(m);
}
์ธ์คํด์ค๊ฐ ๋งค์ฐ ๊ฐ๋ณ๋ค๋ ์ ์ ๊ฐ์ํ ๋ ์ด ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ผ๋ง๋ ๋ง์ ์์ ์ค์ผ ์ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค. ๋ํ ๋ชจ๋ ๋์ฐ๋ณ์ด์๋ ์ด์ ๊ฒ์ฌ๋ฅผ ์ํํด์ผ ํฉ๋๋ค.
๋ค์ํ ์๋๋ฆฌ์ค์์ ๋ค์ํ ์ฑ๋ฅ์ผ๋ก ๊ตฌํํ๋ ๋ช ๊ฐ์ง ๋ฐฉ๋ฒ์ด ์์ต๋๋ค. ์ข์ ์์์ ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ฉฐ ์ฐ๋ฆฌ์ ์ฌ์ฉ์๊ฐ ๋ง์ ๋ ธ๋ ฅ์ ๊ธฐ์ธ์ผ ์ ์๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ ๋ ์ด๊ฒ์ด ๋ฐํด๋ฅผ ์ฌ๋ฐ๋ช ํ๋ ๊ฒ๋ณด๋ค ๋ ์ค์ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ์ฌ๊ธฐ์ ๋ฌด์์ ์ป๊ณ ์๋์ง ์ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
๋ถ๋ณ์ฑ์ผ๋ก ์ ํํ๋ ๋ฐ๋ ๋ง์ ๊ด๋ จ ๋น์ฉ์ด ์๋ฐ๋๋ฉฐ ์ด์ฉ๋ฉด ์ ๊ฐ ๋์น๊ณ ์๋ ๊ฒ์ผ ์๋ ์์ง๋ง
๋น๊ตํ ์ ์๋ ์ด์ ์ด ๋ณ๋ก ์์ต๋๋ค.
์ฃผ์ ์ด์ ์ ๊ฐ๋ฐ์ ์ ํธ๋์ธ ๊ฒ ๊ฐ์ต๋๋ค. ์ด๊ฒ์ด ๊ฐ๋ฐ์๊ฐ ๊ฐ์ง๊ณ ์์ง ์์ ๋ชจ๋ ๊ฒ์
๋๊น?
๊ทธ๊ฒ์ ์ ๋ฌํ ๋ ์๊ฐ์ ์์ ๊ถ์ ๋ํด ์๊ฐํ๋ ค๋ฉด?
๋ถ๋ณ์ฑ์ผ๋ก ์ ํํ๋ค๊ณ ํด์ ๋ฒ๊ทธ๊ฐ ๋ ์์ฃผ ๋ฐ์ํ๋ค๊ณ ์๊ฐํ์ง ์์ต๋๋ค.
๋ฒ๊ทธ ์ ํ์ ๋ณ๊ฒฝํฉ๋๋ค. @ichernev ์ ์๋ ๋ฒ๊ทธ์ ์ ํํ ์ข
๋ฅ๋ฅผ ๋ณด์ฌ์ค๋๋ค.
์ถ์ ํ๊ธฐ ์ด๋ ค์ด ํ๋ฉด์
๋๋ค.
m = moment();
funcIDontTrust(m.clone()); // doesn't actually clone
function funcIDontTrust(m) {
m.year(2005); // perform the clone here
// m is still in 2014
// m.year(2005) created a clone but did not assign it to anything
// it should be `m = m.year(2005)`
console.log(m);
}
๋ค์์ ๊ฐ๋ณ์ฑ๊ณผ ๋ถ๋ณ์ฑ์ ์ฅ๋จ์ ๋ชฉ๋ก์
๋๋ค. ๋ด๊ฐ ๋์น ๊ฒ์ด ์๋ค๋ฉด,
์๋ ค์ฃผ์๋ฉด ์ด ๋๊ธ์ ์์ ํ๊ฒ ์ต๋๋ค.
| ๋ถ๋ณ | ๋ณ๊ฒฝ ๊ฐ๋ฅ |
| --- | --- |
| ์ผ๋ถ ๊ฐ๋ฐ์๋ ๊ทธ๊ฒ์ ์ ํธํฉ๋๋ค | ์ผ๋ถ ๋ค๋ฅธ ๊ฐ๋ฐ์๋ ๊ทธ๊ฒ์ ์ ํธํฉ๋๋ค |
| ์๊ฐ์ ์ง๋๊ฐ ๋ ๋ฒ๊ทธ๋ฅผ ํผํ์ญ์์ค | ๋ณต์ ๋ ์๊ฐ์ ํ ๋นํ๋ ๊ฒ์ ์์์ ๋ ๋ฒ๊ทธ ๋ฐฉ์ง |
| ์์ญ ๊ฐ์ ์๋ก์ด API ๋ฉ์๋๋ฅผ ํตํด ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ๋ ์ง์๋ฉ๋๋ค. | ๊ธฐ์กด .clone() ๋ฉ์๋์์๋ ์ด๋ฏธ ๋ถ๋ณ์ฑ์ ์ง์ํฉ๋๋ค. |
| | 10๋ฐฐ ๋น ๋ฅธ |
| | ํจ์ฌ ์ ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ |
๋ถ๋ณ์ฑ์ด ์ ์ฉํ๋ค๊ณ ์๊ฐํ์ง๋ง JavaScript์๋ ์ ํฉํ์ง ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ถ๋ณ ์ธํฐํ์ด์ค๊ฐ Elm๊ณผ ๊ฐ์ด ๋ถ๋ณ์ฑ์ด ์์๋๋ ์ธ์ด์๋ ์๋ฏธ๊ฐ ์์ ์ ์์ง๋ง JavaScript์ ๊ฒฝ์ฐ ๊ฐ๋ณ์ฑ์ด ์์๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
typeof a === "object"
๋ด์ฅ API์ ๋๋ถ๋ถ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํฉ๋๋ค. Array#push,pop,reverse,sort,shift,splice,unshift
๋ชจ๋ ์ ๋ฐฐ์ด์ ๋ฐํํ๋ ๋์ ๋ฐฐ์ด์ ๋ด์ฉ์ ๋ณ๊ฒฝํฉ๋๋ค. Date#setX
๋ฉ์๋์ 16๊ฐ ๋ชจ๋ ์ธ์คํด์ค๋ฅผ ๋ณ๊ฒฝํฉ๋๋ค.
์๊ฐ์ด ๋ณํ๋ค๊ณ ๋ถํํ๋ ์ฌ๋๋ค์ ๋ง์ด ๋ดค๋ค๊ณ ์๊ฐํ์ง๋ง, ์ฐ๋ฆฌ๊ฐ ์ ํํ๋ฉด ๋ถํํ๋ ์ฌ๋๋ค๋ ๊ทธ๋งํผ ๋ง์ ๊ฑฐ๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ฒ์ ์ด๋ฏธ 2๋
์ ์ eod/sod
๋ฉ์๋์์ ๋ฐ์ํ์ต๋๋ค.
๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ ๋ํ ๋ง์ ์ค๋๋ ๋ฌธ์ ๋ฅผ ์ดํด๋ณธ ํ ์ฌ๊ธฐ์์ ๋ด๊ฐ ์๋ง ๊นจ์ง ๋ ์ฝ๋์ฒ๋ผ ๋ค๋ฆด ๊ฒ์ ๋๋ค. ์์ธก ๋ชจ๋ ์ง๋ ๋ช ๋ ๋์ ์ ๊ธฐ๋ ๋์ผํ ์ฌํญ์ ๋๋ค. ๋๋ ๋จ์ง ๋ณ๊ฒฝ ๊ฐ๋ฅํ API๋ฅผ ์ ์งํ๊ธฐ ์ํ ๋ ผ์์ด ํ ๋ก ์์ ํํ๋์๋์ง ํ์ธํ๊ณ ์ถ์์ต๋๋ค.
@timrwood ์ข์ ๋น๊ต์ด์ง๋ง, ๋ถ๋ณ์ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ดํดํ๋ ๋ฐ ์๊ฐ์
๋ฒ๊ทธ ๋น๊ต๋ ์ ํจํ์ง ์์ต๋๋ค. momentjs๋ ์ฐ๊ฒฐ API๋ฅผ ์ง์ํ๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ์์ํ ์ ์์ต๋๋ค.
var newM = m.year(2005) // wrong, these are both the same!
๋ฐ๋ผ์ immutable๊ณผ mutable์ ํ์ฌ ๋์ผํ ๋ฌธ์ ๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ์ฐ๊ฒฐ API๋ฅผ ์ ๊ฑฐํ๋ฉด ํ์ฌ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฒ์ ์ผ๋ก ์ด๋ฅผ ํผํ ์ ์์ต๋๋ค.
๋ฐ๋ผ์ ํจ์ ๊ฐ์ ์๊ฐ์ ์์ ํ๊ฒ ์ ๋ฌํ ์ ์๊ธฐ ๋๋ฌธ์ ๋ณ๊ฒฝํ ์ ์๋ API๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๊ฒ๋ณด๋ค ์ ํธ๋ฉ๋๋ค. ํ์ฌ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์๊ฐ์ผ๋ก ๊ธฐ๋ฅ ์ฌ์ด์ ์๊ฐ์ ์ ๋ฌํ๋ฉด 2 ๊ฐ์ง ์ต์ ์ด ์์ต๋๋ค.
1) ๋ฏธ์น ๋ฒ๊ทธ ๋ฐฉ์(์๋ง๋ ๊ฐ์ฅ ์ผ๋ฐ์ ์): ๋ชจ๋ ์์ค ์ฝ๋๋ฅผ ์กฐ์ฌํ์ฌ ์์น ์๋ ๋์ฐ๋ณ์ด๊ฐ ์๋์ง ํ์ธํฉ๋๋ค. ์์น ์๋ ๋์ฐ๋ณ์ด๊ฐ ์นจํฌํ์ง ์๋๋ก ๋จ์ ํ
์คํธ๋ฅผ ์์ฑํ์ญ์์ค.
2) ์ ์์ ์ธ ๋ฐฉ๋ฒ(๋์ ๋ชจ๋ ์ฌ๋์ด ์ด๊ฒ์ ํ๊ณ ์๋ค๊ณ ๊ฐ์ ํ์), ๋ฐฉ์ด์ ํ๋ก๊ทธ๋๋ฐ: ๋ด ํจ์์์ ๋ณ๊ฒฝํ๊ธฐ ์ ์ clone() ํจ์๋ฅผ ํธ์ถํ๋ ๊ฒ์ ๊ธฐ์ตํ์ญ์์ค.
๋ถ๋ณ API๋ฅผ ์ฌ์ฉํ๋ฉด ๋งค๋ฒ clone()์ ํธ์ถํ๋ ๊ฒ์ ๊ธฐ์ตํ ํ์๊ฐ ์์ต๋๋ค. ๋์ , ์ฐ๋ฆฌ๋ ๋ณต์ ๋ฅผ ํผํ ์ ์๊ฒ ํด์ฃผ๋ API ํจ์๋ฅผ ํธ์ถํด์ผ ํ๋ค๋ ๊ฒ์ ๊ธฐ์ตํด์ผ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ ํ์ฑ์ ๋ฌธ์ ๊ฐ ์๋๋ผ ์ฑ๋ฅ ์ต์ ํ์ผ ๋ฟ์ ๋๋ค.
๋ณ๊ฒฝํ ์ ์๋ ์ฌ์ฉ ์ฌ๋ก๋ฅผ ์ดํดํ๋ ๋ฐ ์๊ฐ์ ๋ค์ด์ง ์์๋ค๋ ๊ฒ์ ๋ถ๋ช ํฉ๋๋ค.
๋ถ๊ณต์ ํ ๋ฐ์ธ์ ๋๋ค. ์ ์ฃผ์ฅ์ ์ด์ ์ด ์์ง๋ง ๋น์ฉ๋ณด๋ค ์ค์ํ๋ค๊ณ ์๊ฐํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค.
ํจ์ ์ฌ์ด์ ์ ์ ์๊ฐ์ ์์ ํ๊ฒ ์ ๋ฌํ ์ ์์ต๋๋ค.
์ฐ๋ฆฌ๋ ํด๋ก ์ ํธ์ถํ๋ ๊ฒ์ ๊ธฐ์ตํ ํ์๊ฐ ์์ต๋๋ค
์ด๊ฒ์ ๋ถ๋ณ์ฑ์ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์๋๋๊น? ๋ด๊ฐ ์ดํดํ๋ ๋ฐ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง ์์ ๊ฒ์ด ๋ ์๋ค๋ฉด ์๋ ค์ฃผ์ธ์. ๊ทธ๋ฌ๋ ์ด๊ฒ์ ์ง๋ ๋ช ๋ ๋์ ์ ์ผํ ์ฃผ์ฅ์ธ ๊ฒ ๊ฐ์ต๋๋ค.
@timrwood ๋ค, ๊ทธ๊ฒ ์ ๋ถ์ ๋๋ค.
๊ทธ๋ฌ๋ ๊ทํ์ ์ฌ๋ก๊ฐ _against_ ๋ถ๋ณ์ฑ(๋์ฐํ ์ฑ๋ฅ, ๋ณ๊ฒฝ ๊ฐ๋ฅํ API์ ์๋ ๋ค๋ฅธ ์ ํ์ ๋ฒ๊ทธ๋ฅผ ์กฐ์ฅํจ)์ด ์ ํจํ์ง ์๋ค๋ ๊ฒ์ ์ธ์ ํ๋ ํ์๋ฅผ ๋ณด์ง ๋ชปํ์ต๋๋ค.
freeze()๊ฐ ๋์์ด ๋ ์ ์๋์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze
๋๋ ์ฐ๋ฆฌ๊ฐ ecmascript 5 ๊ด์ ์ ๊ณ ์ํด์ผ ํ๋ค๊ณ ์๊ฐํ๊ณ , ์๋ง๋ ํ์ฌ ๊ฐ์ฒด๋ฅผ ์์ ํ ๊ณ ์ ํ๋ ๊ธฐ๋ฅ์ด๋ ํ๋ฆฌ์ฆ ๊ฐ์ฒด๋ฅผ ์๋์ผ๋ก ์์ฑํ๋ ์ ์ญ ํ๋๊ทธ๋ฅผ ์ถ๊ฐํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
http://blogorama.nerdworks.in/preventextensionssealandfreeze/
๊ณ ์ ๊ฐ์ฒด๋ ๊ณ ์ ํด์ ํ ์ ์๊ธฐ ๋๋ฌธ์ ๊ณ ์ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ธฐ ์ํด ์์ฑ์์ ์ถ๊ฐ ๋งค๊ฐ๋ณ์๊ฐ ์์ ์ ์์ต๋๋ค.
@lfnavess ์ฐ๊ธฐ์ ๋ํ ์ฌ๋ณธ์ ์ธ๊ธํ๊ธฐ ์ ์ freeze
์ ๋ํด ์๊ฐํ์ต๋๋ค. ๋ฌธ์ ๋ ... ์๋ฌด๋ ๊ทธ๊ฒ์ ์ฌ์ฉํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค / ๊ทธ๊ฒ์ ๋ํด ์์ง๋ ๋ชปํ๊ณ ์์ธ๊ฐ ๋ฐ์ํ์ง ์์ ๋๋ ๋์์ด ๋์ง ์์ต๋๋ค(๋น์๊ฒฉ ๋ชจ๋์์) -- ์ค์ ๋ก ์ถ์ ํ ๋ฏธ์น ๋ฒ๊ทธ๋ฅผ ์์ฑํฉ๋๋ค.
@timrwood ๋๋ ๋ด ์๋ฅผ ๋ช
ํํ๊ฒ ๋ง๋ค์ง ์์๋ค๊ณ ์๊ฐํฉ๋๋ค. m.year(2014) // clone here
๋ผ์ธ์์ ๋ด๋ถ์ ์ผ๋ก ์๊ฐ์ด ์ค์ ๋ก ํด๋ก ์ ๋ง๋ค๊ณ (๋ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ํ ๋น) m์ด ์๋์ผ๋ก ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ฐ๋ฆฌํฌ ๊ฒ์์ ์๋ฏธํ์ต๋๋ค. ์ด๋ ๊ธฐ๋ณธ์ ์ผ๋ก clone()
๊ฐ ์ฝ๊ฐ์ ์
ธ ๋ฉ๋ชจ๋ฆฌ(๋ด๋ถ ๋ ์ง ํํ์ ๊ฐ๋ฆฌํค๋ ๊ฒ)๋ ํ ๋นํด์ผ ํ๋ค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํจ์ผ๋ก์จ ์ผ๋ง๋ ๋ง์ ๊ฒ์ ์ป์ ์ ์์์ง ๋ชจ๋ฅด๊ฒ ์ต๋๋ค.
์ธํฐํ์ด์ค๋ง ๋ณต์ ํ๊ณ ๊ธฐ๋ณธ ๋ฐ์ดํฐ๋ฅผ ๋ณ๊ฒฝํ๋ ๊ธฐ๋ฅ(๊ณต์ ์ ์ฅ์์์ ์ธ์คํด์ค๋ณ์ผ๋ก)์ ๋ณต์ ํ๋ clone
์ ๋ฐ์๋ ๋ฒ์ ์ ๋ง๋๋ ๊ฒ์ ์ค์ ๋ก Date ๊ฐ์ฒด๊ฐ ์ผ๋ง๋ ๋น์ผ์ง์ ๋ฌ๋ ค ์์ต๋๋ค. ๋จ์ ์ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ ํ์๊ฐ ์๋ค๋ ๊ฒ์
๋๋ค this._storage._d
๋์ this._d
, ๊ทธ๋ฆฌ๊ณ ๊ทธ ํํ์ ๊ทน๋ณต ํ ๊ฒ์
๋๋ค ์๋์ง ํ์คํ์ง ์์ต๋๋ค.
๋๋ ์๊ฐ์ ๊ธฐ์กด ๋ผ์ด๋ธ๋ฌ๋ฆฌ/์ฌ์ฉ์ ๋ง์ด๊ทธ๋ ์ด์ ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ํ ์๊ฒฌ์ ๋ฐ์ง ๋ชปํ์ต๋๋ค. ์์ ๋์ด๋ ์ต์ ์ค ์ด๋ ๊ฒ๋ ๋ง์์ ๋ค์ง ์์ต๋๋ค.
์ญํธํ์ฑ์ ์ด์ ๋ํ ๊ฐ์ฅ ๊ฐ๋ ฅํ ์ฃผ์ฅ์ธ IMO์ ๋๋ค. ๋ง์ฝ ์ฐ๋ฆฌ๊ฐ ์ด๊ฒ์ ํ๋ค๋ฉด, ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ด ์์ฒญ๋ ๋ณํ๋ผ๋ ๊ฒ์ ๋ฐ์๋ค์ฌ์ผ๋ง ํฉ๋๋ค. ์ฐ๋ฆฌ๊ฐ ๊ทธ๊ฒ์ ๋ฐ์๋ค์ด๊ณ ์ถ์ง ์๋ค๋ฉด ๊ทธ๋ ๊ฒ ํด์๋ ์ ๋ฉ๋๋ค.
re:perf๋ ๋ถ๋ณ์ฑ์์ ์ป์ ์ ์๋ ๋ช ๊ฐ์ง ํฐ ์ด์ ๋ ์๋ค๋ ์ ์ ์ธ๊ธํ ๊ฐ์น๊ฐ ์์ต๋๋ค. ๊ทธ๊ฒ์ ๋จ์กฐ๋ก์ด ์ฑ๋ฅ ํํธ๊ฐ ์๋๋๋ค. ์๋ฅผ ๋ค์ด ๊ฐ์ฒด ์์ค์์ ํญ๋ชฉ์ ์บ์ํ ์ ์์ต๋๋ค. ์๋ํ๋ฉด ํญ๋ชฉ์ ์ ๋ ๋ณ๊ฒฝ๋์ง ์๊ธฐ ๋๋ฌธ์
๋๋ค. ๋ํ clone()
์์ ์ด์์๋ ์ฐ๋ ๊ธฐ๋ฅผ ์ต์ ํํ ์ ์์ด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. AFAIK์๋ ๋ ์ง๋ฅผ ๋ณต์ ํ๊ณ 5๊ฐ์ ๊ฐ์ฒ๋ผ ๋ณต์ฌํ๋ ์์
์ด ํฌํจ๋ฉ๋๋ค. newThing._offset = oldThing._offset
์ ๊ฐ์ด ํ๋์ฝ๋ฉํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
Edit, arg, no - ํ๋ฌ๊ทธ์ธ๋ ํ๋๋ฅผ ์ถ๊ฐํฉ๋๋ค(์: ์ฌ๊ธฐ ).
์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ๋ํ ๊ฐํ ์ด๋ง์ ๊ฐ์ํ ๋ ์์ง ๊ฒฝ๋์ ์ ์งํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ์๋ฐ์คํฌ๋ฆฝํธ ์์ค๋ฅผ ๋ถ๊ธฐํ๋ ๊ฒ์ ๋๋ค(์ด ํ๋ก์ ํธ์ ์์ค์์ ๋๋ ์์ ํ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ์์ํจ). ์ธํฐ๋ท์ ์ํ 1์๊ฐ ์ด์์ ๋์๊ด์ ์ํ ๊ณต๊ฐ์ด ์์ต๋๋ค.
๋ํ: ๊ตฌ์กฐ์ ๊ณต์ ์ ๋ํ @ichernev ์ ์์ด๋์ด, ํ ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ๊ณต์ ์ํ ๊ฐ์ฒด๋ฅผ ๋ํํ๋ ๋์ ํ๋กํ ํ์ ์์์ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค.
WhoopInc์ ์ฐ๋ฆฌ๋ ์ด ํ ๋ก ์ ๊ฝค ์ค๋ซ๋์ ์จ์ด ์์์ต๋๋ค. ์ฌ๊ธฐ์์ ํ ๋ก ์ด ์์ผ๋ก ์งํ๋๋ ๊ฒ ๊ฐ๊ธฐ ๋๋ฌธ์ ์ด๋ฒ ์ฃผ๋ง์ ๋น๋ API๋ฅผ ์ฌ์ฉํ๋ ๋ถ๋ณ ๋ฒ์ ์ ์๊ฐ์ด ์ด๋ค ๋ชจ์ต์ผ์ง ์์๋ณด๋ ์๊ฐ์ ๊ฐ์ก์ต๋๋ค. (์ ๋ ์ด๋๋ฐ์ง ์๋ ํ ์๊ฐ์ ๋ํ PR์ ์ ์ถํ ์๊ฐ์ด ์์ต๋๋ค. ์๊ฐ ์์ฒด์ ์ผ๋ก ๊ตฌํ๋ ๊ฒ์ผ๋ก ์์๋๋ ๊ฒ๋ณด๋ค ๋ ๊ฐ๋ ฅํ API ๋ณ๊ฒฝ์ ์๋์ ์ผ๋ก ๋ง๋ค๊ณ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.) ๊ฒฐ๊ณผ๋ ๋ค์๊ณผ ๊ฐ์ต๋๋ค. https://github. com/WhoopInc/frozen-moment
๋๋ ๋จ์ง ๋ช ์๊ฐ ์์ ์์ผ๋ฏ๋ก ๋ชจ๋ ๊ฒ์ด ๊ฐ์ฅ์๋ฆฌ ์ฃผ๋ณ์์ ์ ๋ง ๊ฑฐ์น ์ง๋ง ํ ์คํธ ๊ฒฐ๊ณผ์ ๋ฐ๋ฅด๋ฉด ํต์ฌ ์๊ฐ ๊ธฐ๋ฅ์ ๋๋ถ๋ถ์ด ์๋ํ๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋๋ ์ด ๋ํ๋ฅผ ๊ณ์ ์ถ์ ํ ๊ฒ์ด๋ฉฐ, ์ฐ๋ฆฌ ์ ์ฅ์์ ๋ฌธ์ ์์ ์ฐ๋ฆฌ ํฌํฌ์ ๋ํ ํผ๋๋ฐฑ์ ํ์ํฉ๋๋ค.
์ค๋ ๋ฐค ๊ทธ ๋ฆฌํฌ์งํ ๋ฆฌ์ ์
๋ฐ์ดํธ๋ ๋ฌธ์๋ฅผ ๊ฒ์ํ๋ ค๊ณ ํ์ง๋ง ๊ธฐ๋ณธ์ ์ผ๋ก ๋ชจ๋ setter ๋ฐ mutation ๋ฉ์๋๋ฅผ ๋ณ๋์ ๋น๋ ๊ฐ์ฒด๋ก ๋ถํ ํฉ๋๋ค. ๋ฐ๋ผ์ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ frozenMoment("2014-07-21").thaw().subtract(1, "day").startOf("day").freeze().format("YYYY-MM-DD")
์ฒ๋ผ ๋ณด์ผ ์ ์์ต๋๋ค. (์ด ํน์ ์์์๋ frozenMoment.build("2014-07-21").subtract...
์ฌ์ฉํ์ฌ frozenMoment์์ ๋น๋๋ฅผ ์ด๊ธฐํํ๋ ๋์ ๋น๋๋ก ์ฒด์ธ์ ์์ํ๋ ๊ฒ์ด ๋ ํจ์จ์ ์ด์ง๋ง)
FWIW, ์๊ฐ์ ์ฌ์ฉํ๊ธฐ ์์ํ์ ๋ FP ์์น์ ๋ฐ๋ฅด๊ณ ํจ์๋ฅผ ํธ์ถํ ๋๋ง๋ค ๋์ผํ ๊ฐ์ ๋ฐํํ๋ค๊ณ ๊ฐ์ ํ์ต๋๋ค.
var now = moment();
var yesterday = now.subtract(1, 'days');
var dayBeforeYesterday = now.subtract(2, 'days');
๋ฌผ๋ก ๊ธฐ๋ํ๋ ๊ฒฐ๊ณผ๋ฅผ ์ป์ง๋ ๋ชปํ๋ค. ์ด๊ฒ์ ์๋ก์ด ์ฌ์ฉ์๋ก์ ๋๋ฅผ ๋นํฉํ๊ฒ ๋ง๋ค์์ต๋๋ค.
์ฝ๋๊ฐ ์ด๋ป๊ฒ ๋์ํ ๊ฒ์ผ๋ก ์์ํ๋์ง ๋ณด์ฌ์ฃผ๋ ์ด ์์ฌ ์ฝ๋๋ฅผ ๊ณ ๋ คํ์ญ์์ค.
var now = now;
var yesterday = now - 1day;
var dayBeforeYesterday = now - 2days;
๊ทธ๋ฌ๋ ๊ทธ ๋์ ์ ๋์๊ฒ ์ด์ํ๊ฒ ๋๊ปด์ง๋ ๋ค์๊ณผ ๊ฐ์ด ์๋ํ๊ฒ ๋์์ต๋๋ค.
var now = now;
var yesterday = now = now - 1day;
var dayBeforeYesterday = now = now - 2days;
์ง๊ธ์ ๊ฝค ์ง๋ฃจํ์ง๋ง ์กฐ์ฌ์ค๋ฝ๊ฒ ์ฌ๊ธฐ์ ๊ธฐ .clone()
ํฉ๋๋ค.
var now = moment();
var yesterday = now.clone().subtract(1, 'days');
var dayBeforeYesterday = now.clone().subtract(2, 'days');
IMO, Javascript๋ ๋ฏธ๋ฌํ ์ค๋ฅ๊ฐ ๋ฐ์ํ๊ธฐ ์ฌ์ฐ๋ฉฐ FP ์์น์ด ์ด๋ฌํ ์ค๋ฅ๋ฅผ ์ต์ํํ๋ ๋ฐ ๋์์ด ๋๋ค๊ณ ์๊ฐํฉ๋๋ค.
์ด๋ ค์ด ๊ฒฐ์ ์ด๋ผ๋ ์ ์ ๊ณต๊ฐํฉ๋๋ค. ๋น์ ์ ๋ ธ๊ณ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. Moment.js๋ ๋๋์ต๋๋ค.
100% ๋ถ๋ณ์ฑ์ ์ํด +1.
๋ถ๋ณํ์ง ์๋ ๊ฒ์ ์์งํ ์ข ๋ต๋ตํฉ๋๋ค.
๋ฒ์ 3์์ 100% ๋ถ๋ณ์ฑ์ ์ํด +1
๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ API๊ฐ ์์ด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ(ํนํ .NET DateTime
๋ฐ Joda Time / Noda Time) ์ฌ์ฉ์๋ก์ ์ง๊ด์ ์ผ๋ก add
๋ฉ์๋๊ฐ ๋ ์ง ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝ ํ์ง ์์ ๊ฒ์ผ๋ก ์์ํฉ๋๋ค.
๋ถ๋ณ์ฑ์ ์ํด +1
100% ๋ถ๋ณ์ฑ์ ๊ฒฝ์ฐ +1
๋ถ๋ณ์ฑ์ ๋ํ ๊ฒฐ์ ์ด ๋ด๋ ค์ง๋ค๋ฉด, ๋๋ ๊ทธ๊ฒ์ ์คํํ๊ธฐ ์ํด ๊ธฐ๊บผ์ด ์๊ฐ์ ํ ์ ํ ๊ฒ์ ๋๋ค. ํ์ ํตํ๋ฅผ ํตํด ํ์ด๋งํ ์ ์์ต๋๋ค. ์คํ ์์ค์ ๋ ๋ง์ ๊ธฐ์ฌ๋ฅผ ํ๊ณ ์ถ์ง๋ง ์๋ น์ ๋ฐฐ์์ผ ํฉ๋๋ค.
๋์๊ฒ๋ ๋ถ๋ณ์ฑ์ด ๋ฐ๋์งํ์ง๋ง ์ฒ์๋ถํฐ ํ์ด์ผ ํ์ต๋๋ค. ์ด๊ฒ์ ๊ธ๊ฒฉํ ๋ณํ์ ๋๋ค. ๋ถ๋ณ์ฑ์ ์ด์ ์ ๋ง์ถ ์ด ํ๋ก์ ํธ์ ํฌํฌ๋ ๋ ๋์ ์์ด๋์ด์ผ ๊ฒ์ ๋๋ค.
@dsherret ๊ทธ๊ฒ์ด ์ฉ๋ ์ ๋๋ค. ์ฐ๋ฆฌ๋ ์ฃผ์ ๋ฒ์ ์ ์ถฉ๋ํ ๊ฒ์ ๋๋ค.
๊ทธ๋ฌ๋ ์ฝ๊ฐ์ ๋ ธ๋ ฅ์ผ๋ก ๊ตฌ์ฑ ์ต์ ์ผ๋ก ๋์ ํ ์ ์์ต๋๋ค. "๋ชจ๋ ๊ฒ์ ๋ณ๊ฒฝํ ์ ์์ต๋๊น? True ๋๋ False"์ ๋๋ค. ๊ธฐ๋ณธ๊ฐ์ false์ ๋๋ค.
์ง์๋์ง ์๋ ๋น๊ณต์ ymmv ๋ถ๋ณ ์๊ฐ ํ๋ฌ๊ทธ์ธ: https://gist.github.com/timrwood/fcd0925bb779f4374a7c
ใ ! ๋๋ ํจ์ฌ ๋์ค์ ์ฌ๊ธฐ์ ์์ ๋ ๋ถ๋ณ API์ ๋ํ ์ฒซ ๋ฒ์งธ ์ง์ง์ ์ค ํ๋๋ผ๋ ๊ฒ์ ๋ฐ๊ฒฌํ๊ณ ๋๋์ต๋๋ค. :)
๊ทธ๋ฆฌ๊ณ ๋ค, ์ ๋ ๋ค์ ๋ฉ์ด์ ๋ฒ์ ์ ๋ถ๋ณ์ฑ์ ๋ํด +1์ ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ ์๊ฐ์ ๋ํ ๋ ๋ค๋ฅธ +1์
๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ฌ๊ธฐ ๋ด '์๊ฐ' ์กฐํฉ์ด ์์ต๋๋ค: https://gist.github.com/idrm/a91dc7a4cfb381dca24e (์์ ์ ์ฑ
์ํ์ ์ฌ์ฉํ์ญ์์ค!). ์๊ฐ() ํธ์ถ์ imoment()๋ก ๋ฐ๊พธ๋ฉด ์ถฉ๋ถํฉ๋๋ค. ๋ชจ๋ ์ ์ moment.xyz()(์: moment.min(), moment.max() ๋ฑ) ํจ์ ํธ์ถ์ ๊ทธ๋๋ก ์ ์ง๋์ด์ผ ํฉ๋๋ค.
+1๋ฐฑ๋ง ๋ฌ๋ฌ
๋ถ๋ณ์ฑ์ ์ํด +1
๋ํ ์ด ํ ๋ก ์ค๋ ๋์ ์ด์ ์ ์์ +1์ ์ถ๊ฐํ์ฌ ์ผ๋ถ ๊ธฐ๋ฅ์ ์ด๋ฆ์ ๋ ์ฝ๊ฒ ๋ณ๊ฒฝํ์ฌ ์ฝ์ ์ ์์ต๋๋ค("startOf"์์ "toStartOf", "add"์์ "plus", "month"์์ "withMonth) ", ๋ฑ.)? ์ฆ, ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ ๊ฒฝ๋ก๋ฅผ ์ฌ์ฉํ๋ค๊ณ ๊ฐ์ ํฉ๋๋ค. ์ ๋ Joda Time์ ๋ง์ด ์ฌ์ฉํ๋ฉฐ, ์๋ฅผ ๋ค์ด "date.withDayOfMonth(1).withDayOfWeek(DateTimeConstants.MONDAY)"๊ฐ ๋ฌด์์ ์๋ฏธํ๋์ง ์ฝ๊ฒ ์ ์ ์์ต๋๋ค.
์ด๊ฒ๋ค์ ๋ฉ์ธ ๋ฐฐํฌํ JS์ ์์ ํ์๋ ์์ต๋๋ค. ๋ฐ๋๋ผ JS ์์ ์ด๊ฒ๋ค์ ์ถ๊ฐํ๋ ์ ๋์จ๋ ์ ์๋ํฉ๋๋ค(์ ์ฅ, ๋๋ ๋ด "์๊ฐ" ๋ชจ๋์ ๊ฒฐํฉํ๊ธฐ ์ํด ๊ทธ๋ฌํ Joda Time-aligned ์ ๋์จ์ ์ง์ ์์ฑํ๋ ๊ฒ์ ๊ฐ๋ ฅํ ๊ณ ๋ คํ๊ณ ์์ต๋๋ค).
@ichernev , @icambron , ์ด๊ฒ์ ๋ํ ๊ฒฐ์ ์ ๋ด๋ฆฌ์ จ์ต๋๊น? 3.0์์ ์๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์๊น์? ๊ทธ๋ ๋ค๋ฉด: 3.0์ด ์ธ์ ๋์ฌ ๊ฒ์ผ๋ก ์์ํ์ญ๋๊น? ๋๋ frozen-moment๋ฅผ ์ฌ์ฉํ๊ฑฐ๋ ์์ ๋ํผ๋ฅผ ์ง์ ์์ฑํ๋ ๊ฒ์ ๊ณ ๋ คํ๊ณ ์๊ธฐ ๋๋ฌธ์ ๋ฌป๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ธฐ๋ค๋ ค์ผ ํ๋์ง ๊ถ๊ธํฉ๋๋ค.
์ฐธ๊ณ ๋ก, frozen-moment๋ ์ต๊ทผ ๋๋ถ๋ถ ๋ณด๋ฅ ํจํด์ ์์์ต๋๋ค. ์ ์คํธ๋ฆผ Moment์์ ๋ง์ PR์ ์ด์ํ์ง๋ง ํด๋น ํฌํฌ์์ ์ด์์ ์ผ๋ก ๋ฐ์ํด์ผ ํ๋ ๋ค๋ฅธ ๋ฆฌํฉํ ๋ง์ ๋ํด์๋ ์ค์ ๋ก ์์ ํ์ง ์์์ต๋๋ค.
์ฆ, ๊ธฐ๋ณธ ์์ด ๋ก์บ๋ง ํ์ํ ๊ฒฝ์ฐ frozen-moment๊ฐ ํ๋ฅญํ๊ฒ ์๋ํฉ๋๋ค. (๋ชจ๋ ๊ฒ์ด ๋ด ์ฌ์ฉ ์ฌ๋ก์ ์ ํฉํ๋ฉฐ Moment์ ๋์ ๋จ์ ํ ์คํธ ๋ฒ์๋ฅผ ์ ์งํ์ต๋๋ค.) ์์ด๊ฐ ์๋ ์ธ์ด๋ Moment์ ์ต๊ทผ ๋ฆฌํฉํฐ๋ง๋ ๋ก์ผ์ผ API๋ฅผ ์ด์ํ ํ ์ ๋ฐ์ดํธ๋์ง ์์๊ธฐ ๋๋ฌธ์ ๊นจ์ก์ต๋๋ค.
์ผ๋จ Moment 3.0์ ๋ํ ๊ฒฐ์ ์ด ๋ด๋ ค์ง๋ฉด Moment์ ๋ถ๋ณ์ฑ ์์ ์ด๋ ์ ์ ํ ๊ฒฝ์ฐ frozen-moment ํฌํฌ์ ๋ํด ์ข ๋ ์ง์งํ๊ฒ ์์ ํ ๊ณํ์ ๋๋ค. ๋์ ์ด๊ธฐ ๋ชฉํ๋ ๋ก์ผ์ผ ์ง์์ ์์ ํ๊ณ Moment 3.0์ API์ ๊ธฐ๋ฅ ํจ๋ฆฌํฐ๋ฅผ ์ ์งํ๋ ๊ฒ์ ๋๋ค.
๋ถ๋ณ์ฑ์ ์ํด +1
๋ถ๋ณ์ฑ์ ์ํด +1. ๋ํ ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ๋ format
๋ฉ์๋๋ ์ด๋ป์ต๋๊น?
๋ถ๋ณ์ ์๊ฐ์ +1.js
์๋๋ฉด moment.js์ ํฌํฌ? ๋ถ๋ณ์ ์๊ฐ.js? ์ด๊ฒ์ ํ์คํ ํ๊ธฐ์ ์ธ ๋ณํ๊ฐ ๋ ๊ฒ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
:100:
์ด๋ชจํฐ๋ธ์ ํด!
+1 ์์ฆ ๋ถ๋ณ์ฑ์ ์ข์ JS API์์ ๊ธฐ๋ํ๋ ๊ฒ์ ๋๋ค.
:+1: ์, ์ฐ๋ฆฌ๋ ์ด๊ฒ์ ๋งค์ฐ ์ํฉ๋๋ค. ํ์ฌ ์ฐ๋ฆฌ๋ .clone()์ ๋์ฒ์ ๋ฟ๋ฆฝ๋๋ค.
+1 ์ด๊ฒ์ ์์ฃผ ์ข์ ๊ฐ์ ์ด ๋ ๊ฒ์ ๋๋ค
:+1: ๋ชจ๋ ๊ฒ์ ๋ณ๊ฒฝํ ์ ์์
๋ถ๋ณ์ ๊ฒฝ์ฐ +1
๋ชจ๋ ๊ฒ์ ๋ถ๋ณ์ผ๋ก ๋ง๋์ญ์์ค. ๋๋ now ๋ณ์์ ๋ํด ์์ ํ๊ธฐ ์ ์ ๋งค ์๊ฐ(now) ๋ณ์๋ฅผ ๋ณต์ ํ๋ ๊ฒ์ด ์ง๊ฒน์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ now๋ ๋ค์ ๋ณ๊ฒฝ๋ฉ๋๋ค.
๋ถ๋ณ์ฑ์ ์ํด +1
๋๋ startOf('day')
๊ฐ ๋ณ์ดํ ๊ฒ์ด๋ผ๊ณ ๊ธฐ๋ํ์ง ์์์ ๊ฒ์
๋๋ค. ๋ด ์์ฉ ํ๋ก๊ทธ๋จ์ ์ฌ๋ฏธ์๋ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ์ต๋๋ค.
๋๋ ๋๋ถ๋ถ์ moment.js ์ฐ์ฐ์๊ฐ ๊ฐ๋ณ์ฑ์์ ์ด์ํ๋ค๋ ๋ฐ ํ์คํ ๋์ํฉ๋๋ค. mmnt.startOf('day')
์ mmnt
๋ณ๊ฒฝํ๋ค๋ ์ ์์ ๋งค์ฐ ์ง๊ด์ ์
๋๋ค.
๋๋ ๋ง์ ๋ฃจํ์ ๋ ์ง ๋น๊ต๊ฐ ์๋ ๋ฌ๋ ฅ ์ ํ ์ฌ์ฉ ์ฌ๋ก์ moment.js๋ฅผ ์ฌ์ฉํฉ๋๋ค. ๋๋ clone()
์ฑ๋ฅ ๋ฌธ์ ๋ฅผ ๊ฒช์๊ณ ๊ทธ๋ค์ ๋์ฐํฉ๋๋ค. ์ด๋ค ํด๋ก ์ด๋ค ๋ณ์ด ์ผ๋ถ ์ ์ด๋ฅผ ๊ฐ๋ ๊ฒ์ ๋์๊ฒ ์๋ง ๋ค๋ฅธ ์ฌ๋ ํ์์ ์ด๋ค.
๋ชจ๋ ๊ณณ์ clone()
๊ฐ ์๋ ๊ฒ์ด ์ฒ์์๋ ์ด์ํด ๋ณด์ผ์ง๋ผ๋ ๊ทธ๊ฒ์ด ํ๋ ์ผ์ ๋งค์ฐ ๋ช
ํํ๊ณ ์ฑ๋ฅ์ ์ํ ๋ฆฌํฉํ ๋ง์ ๋งค์ฐ ์ฝ๊ฒ ๋ง๋ค์์ต๋๋ค.
๋ชจ๋ ๋ฉ์๋๊ฐ ๋ ๋์ API๋ฅผ ์ํด ๋ด๋ถ์ ์ผ๋ก clone()
๋งน๋ชฉ์ ์ผ๋ก ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด ์์ ์ ๋์น ๊ฒ ๊ฐ์ต๋๋ค.
๋ด 2ยข :-)
@jdurand ๋ช ์์ ์ผ๋ก ๋ณต์ ํ๋ ๊ฒ๋ณด๋ค ๋ช ์์ ์ผ๋ก ๋ณ๊ฒฝํ๊ณ ์ถ์ต๋๋ค.
@dsherret ๋๋ ๋ช
์ ์ ์ผ๋ก ์๋ฌด ๊ฒ๋ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ๋ด ์ฃผ์ ๊ด์ฌ์ฌ๋ ๋งค์ฐ ๋น์ฉ์ด ๋ง์ด ๋๋ ์์
์ด๋ฏ๋ก ์์์ ์ผ๋ก ๋ณต์ ํ์ง ์๋ ๊ฒ์
๋๋ค.
๋๊ตฐ๊ฐ๋ setters๊ฐ ๋ณต์ ๋ ๋ณต์ฌ๋ณธ์ ๋ฐํํด์ผ ํ๊ณ ๊ทธ๊ฒ์ด ์ ๋ฅผ ๋๋ ต๊ฒ ํ ๊ฒ์ด๋ผ๊ณ ์ธ๊ธํ์ต๋๋ค. ๋งค์ฐ ๋นํจ์จ์ ์ผ ๊ฒ์
๋๋ค.
@jdurand ๋ ๋นํจ์จ์ ์ผ ์ ์์ง๋ง ์์์ ๋ณต์ ๋ ๋ณต์ ๋ ๊ฐ์ฒด์ ๋ณ๊ฒฝ๋ ๊ฐ์ฒด์ ์ฐจ์ด๊ฐ ์ต์ข ์ฌ์ฉ์์ ๊ฒฝํ์ ๋์ ๋๋ ์ฐจ์ด๊ฐ ์๋ ๋๋ถ๋ถ์ ์์ฉ ํ๋ก๊ทธ๋จ์ ๋์์ด ๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๊ฐ ํ ๋ฒ์ ์์ฒ ๊ฐ์ ๋ ์ง ์์ ์ ์ํํ์ง ์๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์์ ์ฉ์ด์ฑ๊ณผ ๊ฐ๋ฐ์ ์ค๋ฅ๋ฅผ ๋ฐฉ์งํ๋ ค๋ ๋ ธ๋ ฅ์ด ๋ช ๋ฐ๋ฆฌ์ด๋ณด๋ค ์ฐ์ ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ๋ณต์ ๋์ ๋์ฐ๋ณ์ด๋ฅผ ์ํ๋ค๊ณ ๋ช ์์ ์ผ๋ก ๋งํ ์ ์์ต๋๋ค.
์ฐธ๊ณ : ์ด ๋ณ๊ฒฝ์ผ๋ก ์ธํด ์ฑ๋ฅ์ด ์ฝ๊ฐ ํฅ์๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค... ์๋ฅผ ๋ค์ด, ๋์ ๊ณผ๊ฑฐ์ ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฐธ์กฐํ๊ณ ์ด ๊ฐ์ฒด์ ๋ํด ์ํํ ์์
์ ์ ์ฅํ์ฌ ๋ณต์ ๋ฅผ ์ ๊ฑฐํ ์ ์์ต๋๋ค(์: add(1, 'days')
). ๊ฒฐ๊ณผ๋ .toString()
, .format()
, .toDate()
, .day()
๋ฑ์ด ํธ์ถ๋ ๋ ์ฐ์ฐ์ ์คํํ์ฌ ๊ณ์ฐ๋ฉ๋๋ค. ๊ทธ๊ฒ์ ๊ทน์ ์ธ ๋ณํ๊ฐ ๋ ๊ฒ์ด๋ฉฐ ๋ ๋นจ๋ผ์ง์ง ์์ ์๋ ์์ต๋๋ค ... ์ฑ๋ฅ์ ๋น๊ตํ๊ธฐ ์ํด ์ผ๋ถ ๋จ์ ํ
์คํธ๋ฅผ ์ํํด์ผ ํ ๊ฒ์
๋๋ค (๋ํ ์ฝ๋๋ฅผ ๋ณธ ์ ์ด ์๊ธฐ ๋๋ฌธ์ ๊ณ ๋ คํ์ง ์์ ๋ค๋ฅธ ๋ฌธ์ ๊ฐ์์ ์ ์์ต๋๋ค ๋ณต์ ๋ฐฉ๋ฒ ์ด์ธ์ moment.js์์).
@dsherret ๋๋ _builder_/_lazy_ ์ ๊ทผ ๋ฐฉ์์ ์ข์ํฉ๋๋ค. ๋์ด์ผ๋ณด๋ฉด ์๋ง ์ฒ์๋ถํฐ ์ด๋ ๊ฒ ์ง์ด์ก์ด์ผ ํ์ ๊ฒ์
๋๋ค.
๋ง์ํ์ ๋๋ก API ํธํ์ฑ์ ์ผ๋์ ๋ ๋ถ๋ณ์ ํฌํฌ๊ฐ ๊ฐ์ฅ ์ข์ ๊ฒ ๊ฐ์ต๋๋ค.
2์ผํธ ๋:
์ธ์ ๋ถํฐ ์ฐ๋ฆฌ๋ ๋ณํ๋ฅผ ๊นจ๋ ๊ฒ์ ๋๋ ค์ํฉ๋๊น? ํ์ฌ ๋ฒ์ ์ ์์ ์ ์ด๋ฉฐ ์ฌ๋๋ค์ ์ฝ๋ ๊ธฐ๋ฐ์ ๋ฆฌํฉํ ๋งํ์ง ์๊ณ ๋ ๊ณ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ ๊ฐ์ ์ฝ๋๋ฒ ์ด์ค๋ฅผ ์ ์งํ๋ ๊ฒ์ ๊ณ ํต์ค๋ฝ๊ณ ์๋๋ฅผ ๋ฆ์ถ๋ฉฐ ๋ณ๊ฒฝ ๊ฐ๋ฅ/๋ถ๋ณ ๋ฒ์ ์ ๋ณด์ ํ๋ ๊ฒ๋ง์ผ๋ก๋ ๊ฐ์น๊ฐ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ์์ ํ ๋ถ๋ณํ๋ ์๊ฐ์ผ๋ก ๋์ด๊ฐ์ ๋ฉ์ด์ ๋ฒ์ ์ ๋ฒํ๊ณ ๋๋ ์๋ค :๋์:
๋ฐฉ๊ธ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๊ธฐ ์์ํ๋ฉด์ ์ด ์ค๋ ๋๋ฅผ ์ฐพ์์ง๋ง ์ผ๋ถ ์ฝ๋๋ฅผ ๋๋ฒ๊น ํ๊ณ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์์ธกํ ์ ์๋ ๋ถ์์ฉ์ผ๋ก ๋ณด์ด๋ ๊ฒ์ ์ฒ๋ฆฌํ๊ณ ์์์ต๋๋ค. ์์ ํ ๋ณ๊ฒฝํ ์ ์๋ ๋ฒ์ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ณด๊ณ ์ถ์ต๋๋ค!
๋ป๋ปํ ํ๋ฌ๊ทธ: ์ฌ๊ธฐ์ ํ๊ณ ํ ๊ฒฐ์ ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐ ์ง์ณค์ต๋๋ค. ์ง๋ ๋ฉฐ์น ๋์ ๋๋ Frozen Moment๋ฅผ ๋ถํ์ํค๊ณ Moment ์์ฒด์ ํ๋ฌ๊ทธ์ธ ์ญํ ์ ํ๋๋ก ๋ค์ ์์ฑํ์ต๋๋ค. ์ฃผ๋ง์ ์ฒซ ๋ฒ์งธ ํ๋ฆฌ๋ทฐ ๋ฆด๋ฆฌ์ค๋ฅผ ์๋ฃํ๋ ๋ฐ ๋์์ ์ค @wyantb ์๊ฒ ๋ชจ์ ํ.
Frozen Moment๋ Moment์ฒ๋ผ ์๋ํ๋ ๋ถ๋ณ ์ ํ์ ์ ๊ณตํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ ๋ฒ์ ์ Moment์ ๊ธฐ๋ฅ์ ๋ํํ๊ณ ์ ์ ํ ๋๋ง๋ค .clone()
๋ฅผ ํธ์ถํฉ๋๋ค.
๋น๋ API๋ฅผ ์ข์ํ๋ ์ฌ๋๋ค์ ์ํด Moment ์์ฒด๋ฅผ ๋น๋ ๊ฐ์ฒด์ ์์ฃผ ์ข์ ๊ตฌํ์ผ๋ก ์๊ฐํ๋๋ก ๋์ ํ๊ณ ์ถ์ต๋๋ค! Frozen Moment๋ ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ์ํ๋ ํต์ฌ ๋ถ๋ณ ์ ํ๊ณผ ๋ณ๊ฒฝ ๊ฐ๋ฅํ Moment์์ ๋ถ๋ณ์ Frozen Moment๋ฅผ ๊ตฌ์ถํ๋ ๋ฉ์ปค๋์ฆ์ ์ถ๊ฐํฉ๋๋ค.
ํธ๋ฆฌํ ๋ถ๋ณ API๋ก ์์
ํ๊ณ ์ถ์ ๋ถ๋ค์ ์ํด -- ์ ๋ ์ง์ํ๋ ค๊ณ ํฉ๋๋ค. ์์ง Frozen ์ธ์คํด์ค๋ฅผ ์ง์ ๋น๋ํ ์์ฑ์๋ฅผ ๋ง๋ค์ง ์์์ง๋ง TODO ๋ชฉ๋ก์ ์์ต๋๋ค. ๋จ๊ธฐ์ ์ผ๋ก ํด๊ฒฐ ๋ฐฉ๋ฒ์ moment().freeze()
๋๋ moment.utc().freeze()
๋ชจ๋ ๊ฒ์ ๋ง๋๋ ๊ฒ์
๋๋ค.
Frozen Moment๋ ๋ถ๋ช ํ ์ ์ ์ฝ๋๋ฒ ์ด์ค์ด๋ฏ๋ก ๋ช ๊ฐ์ง ๊ฑฐ์น ๋ถ๋ถ์ด ์์ ์ ์์ต๋๋ค. ํ์ง๋ง ์ฌ๊ธฐ ์๋ ๋๊ตฌ๋ผ๋ ์๋ํด ๋ณด๊ณ ์์๋๋ก ์๋ํ์ง ์๋ ๋ฌธ์ ์ ๋ํด ๋ฌธ์ ๋ฅผ ์ ๊ธฐํ ๊ฒ์ ๊ถ์ฅํฉ๋๋ค.
์, ํ ๊ฐ์ง ๋: ์ ๋ ์์ง ์ด๊ฒ์ ๊ด๊ณ ํ์ง ์์ง๋ง Frozen Moment ์ธ์คํด์ค๋ ๋๋ถ๋ถ์ Moment ํ๋ฌ๊ทธ์ธ์์ "๊ทธ๋ฅ ์๋"ํด์ผ ํฉ๋๋ค. ๋ค๋ฅธ ๋ชจ๋ Moment ํ๋ฌ๊ทธ์ธ์ด Frozen Moment ์ ์ ๋ฑ๋ก๋์๋์ง ํ์ธํ์ญ์์ค. ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ Frozen Moments์์ ์์๋๋ก ์๋ํ์ง ์๋ ํ๋ฌ๊ทธ์ธ์ ๋ฐ๊ฒฌํ๋ฉด ๋ฒ๊ทธ๋ฅผ ์ ๊ณ ํด ์ฃผ์๋ฉด ์กฐ์ฌํ๊ฒ ์ต๋๋ค.
๋ถ๋ณ์ฑ +1
๋ถ๋ณ์ ๊ฒฝ์ฐ +1
์๋ฌด๋ Immutable JS ์์ ์๊ฐ์ ๊ตฌํํ๋ ๊ฒ์ ๋ณด์์ต๋๊น? JS์ ๋ถ๋ณ์ฑ์ ์ํด ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ด๋ฉฐ ๋ถ๋ณ ๊ฐ์ฒด์ ๋ณ๊ฒฝ๋์ง ์์ ๋ถ๋ถ์ ์ฌ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ๋ฌธ์ ๋ฅผ ์ค์ ๋๋ค.
+1
๋๋ ์ด๊ฒ์ผ๋ก ์ธํด 3๋
๋ ๋ฒ๊ทธ๋ฅผ ์์ ํ์ต๋๋ค: https://github.com/Saleslogix/argos-saleslogix/commit/87b35b22c1a42670da369701b15e2bdb3786cabc
๊ทธ๋์ ์ฌ์ฉ์๋ ๋ถ๋ณ์ฑ์ ์๊ตฌํ์ง๋ง ํต์ฌ ํ์ ๊ทธ๊ฒ์ ํ์ง ์์ ํ๊ณ๋ฅผ ์ฐพ์ต๋๊น? :NS
์ฌ๋ฌ๋ถ, ์ด ๋ณ๊ฒฝ์ ES6์์ ์ฝ๋๋ฅผ ๋ค์ ์์ฑํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๋ ์ค์ํฉ๋๋ค. ^^ ํ์ฌ ํ์์์ API๋ ๋จ์ํ ์ผ๋ถ ๋ฉ์๋(ํํฐ, ์ฐ๊ฒฐ ๋ฑ)๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ JS Array์ ๋น์ทํ์ง๋ง ์ผ๋ถ๋ ์ข์ง ์์ต๋๋ค. ๋ค๋ฅธ ๊ฒ๋ค์ ํ์ ํธํ์ฑ์ ๋ํ ์ ์ฝ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ณด๋ค ๋ฌดํํ ๋๋ค๋ ์ ์ ์ ์ธํ๊ณ ๋ (์ญ๋ฐฉํฅ, ์ ๋ ฌ) ์๋๋๋ค.
+1
ํญ์ ๋๋ฅผ ์ป๋ ์์ ํจ์ (IMHO ์ด๊ฒ์ ๋ถ๋ณ์ฑ์ ์ข์ ์ด์ ์ ๋๋ค):
var today = moment();
for (var i = 0; i < 7; i++) {
week.push(today.subtract(i, 'days').format('dd').toUpperCase());
}
์ด๊ฒ์ ์ฌํ๊ฒ๋ ๋ ์ง ์ด๋ฆ์ด ์๋ ๋ฐฐ์ด์ ์์ฑํ์ง ์์ง๋ง ์ค์ ๋ก ๋ค์๊ณผ ๊ฐ์ด ๋ ์ง๋ฅผ ๊ณ์ฐํ๊ธฐ ๋๋ฌธ์ ์ด์ํ ๊ฒ์ ์์ฑํฉ๋๋ค.
i = 0 = today -0;
i = 1 = today -0 -1;
i = 2 = today -0 -1 -2;
etc
๋ฐ๋ผ์ ๋ค์๊ณผ ๊ฐ์ด ๋ฆฌํฉํ ๋งํด์ผ ํฉ๋๋ค.
var today = moment();
for (var i = 0; i < 7; i++) {
if (i == 0) {
week.push(today.subtract(0, 'days').format('dd').toUpperCase());
}
else {
week.push(today.subtract(1, 'days').format('dd').toUpperCase());
}
}
@faebser ํ๋ฅญํ ์
๋ถ๋ณ์ฑ์ ์ํด +1
+1
@faebser๋ ์ค๋ ์์นจ์ ๋์๊ฒ ์ผ์ด๋ฌ์ต๋๋ค. Angular์ ์๋ฐฉํฅ ๋ฐ์ธ๋ฉ + ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ **s์์ ํ์ฌ ๋ ์ง๋ฅผ ์์ ํ์ง ์๋๋ก ๋ณต์ ๋ ์ง๋ฅผ ์ ์งํ๋ ๋ฐ ์ด๋ ค์์ ์ค๋๋ค.
๋ถ๋ณ์ฑ์ ์ํด +1, ์ด๊ฒ์ ๋จ์ง ๋ช ์๊ฐ์ด ์์๋ฉ๋๋ค.
:+1:
๋ถ๋ณ์ฑ์ ์ํด +1
๋๋์ด ์ฃผ์ ์ ๋ํด ์ฝ๊ฐ ์ฐข์ด์ก์ต๋๋ค.
๋ด ์์ ์์์ฃผ์์๋ "๋ถ๋ณ์ฑ์ ์ํด +1! ์๊ฐ ๊ฐ์ฒด๋ ๋ถ๋ช ํ ValueObject ์ข ๋ฅ์ ๋๋ค."๋ผ๊ณ
๊ทธ๋ฌ๋ ์ฐ๋ฆฌ๋ moment.js๊ฐ GitHub์์ 13๋ฒ์งธ๋ก ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ์๋ฐ์คํฌ๋ฆฝํธ ์ ์ฅ์์ด๊ณ (์ ์ฒด์ ์ผ๋ก 24๋ฒ์งธ ), bower.io์์ "moment"๋ฅผ ๊ฒ์ํ๋ฉด 111๊ฐ์ ์ผ์นํ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค๋ ์ฌ์ค์ ๋ฌด์ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๊ฐ ์ ํ๋ฆฌ์ผ์ด์ ๋น๋์๊ฒ ๋ถ๋ณ ๋ฒ์ ์ ์๊ฐ์ ๊ตฌํํ๋ ์ ์ง์ ์ธ ๋ฐฉ๋ฒ์ ์ ๊ณตํ ์ ์๋ค๊ณ ํด๋ ์ข ์์ฑ ๊ฐ์ ์์ฒญ๋ ํผ๋์ ์ผ๊ธฐํ ๊ฒ์ ๋๋ค.
@ichernev ์๋ง๋ ๋ ๊ฒธ์ํ ์ ์: ์๊ฐ ๋ฌธ์ ํ์ด์ง์ ์์ ๋ถ๋ถ์ ๋ณ๊ฒฝ์ฑ ๋ ๋ถ๋ณ์ฑ์ ๋ํด ์ด์ผ๊ธฐํ๋ ๋ฐ ํ ์ ํ ์ ์์ต๋๊น? ์ฃผ์ ์ ๋ํ ๊ณต์ ์ ์ฅ์ ๊ฐ๋ตํ๊ฒ ์ค๋ช ํ๊ณ ์ฃผ์ฅ์ ๋ํ ๊ฐ๋ตํ ์์ฝ์ ์ถ๊ฐํ๊ฑฐ๋ ์ด ์ค๋ ๋์ ๋ํ ๋งํฌ๋ฅผ ๋ฐฐ์นํ๊ฑฐ๋ ํน์ ํ ๋ก ์ ๋ ฅ์ ์ํ ๊ฒฝ์ฐ CTA์ฒ๋ผ ์๋ํ ์ ์์ต๋๋ค.
ํ์ฌ ๋ฌธ์ ํ์ด์ง์๋ "๋ถ๋ณ"์ด๋ผ๋ ์ฉ์ด๊ฐ ์ธ๊ธ๋์ด ์์ง ์์ต๋๋ค. "moment immutable"์ ์ธํฐ๋ท ๊ฒ์ํ๋ฉด ์ด ํ์ด์ง๋ก ์ด๋ํ์ง๋ง ์ฝ๋ ๋ฐ 2์๊ฐ์ด ๊ฑธ๋ ธ๊ณ ํด๋น ์ฃผ์ ์ ๋ํ ๊ทํ์ ํ์ฌ ์ ์ฅ์ด ์์ง ํ์คํ์ง ์์ต๋๋ค. "์๊ฐ ๋ถ๋ณ"์ ๋ํ Google์ ์ต๊ณ ํํธ๊ฐ ์๊ฐ ๋ถ๋ณ์ ๋ฏธ๋์ ๋ํ ๋น ๋ฅธ ๋ต๋ณ์ ์ฃผ์๋ค๋ฉด ์ข์ ๊ฒ์ ๋๋ค. :)
@jehoshua02 ์ธ์ฉ:
"์ด๊ฒ์ด ์ด๋ ค์ด ๊ฒฐ์ ์ด๋ผ๋ ์ ์ ๊ณต๊ฐํฉ๋๋ค. ๋น์ ์ ๋
ธ๊ณ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. Moment.js๋ ํ๋ฅญํฉ๋๋ค."
์ฌ๊ธฐ ๋ด ์ ์์ด ์์ต๋๋ค. ๊ธฐ๋ณธ ๋ชจ๋ฉํธ๋ฅผ ๋ณ๊ฒฝํ ์ ์๋๋ก ๋ง๋๋ ๋์ moment.immutable
ํฉํ ๋ฆฌ๋ฅผ ์ถ๊ฐํ์ญ์์ค. ๊ทธ๊ฒ์์ ์์ฑ์ด ๋ ๊ฒ์
๋๋ค moment
๊ธฐ๋ฅ๊ณผ ๊ฐ์ ์ ํํ API ์๋ช
๋ฌถ์ผ ๊ฒ moment
, ๊ทธ๋ฌ๋ ๋ถ๋ณ.
๋ณ๊ฒฝ ๊ฐ๋ฅํ moment
ํฉํ ๋ฆฌ์ ํ๋กํ ํ์
ํ์ฅ์ผ ์๋ ์์ต๋๋ค. ํ๋กํ ํ์
์ ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ง๋ง ๋์ ๋ณต์ ํฉ๋๋ค.
ํธ์ง: WhoopInc/frozen-moment ๊ฐ ์ ํํ ๋ด๊ฐ ์ฐพ๊ณ ์๋ ๊ฒ ๊ฐ์ต๋๋ค.
@thomasvanlankveld ๋ธ๋ ์ดํน ์ฒด์ธ์ง๋ ์ฃผ์ ๋ฒ์ ๋ฒํธ์ ๋๋ค. Bower์ npm์ ์ฌ์ฉํ๋ ์ฌ๋์ ํ์ฌ ์ฃผ์ ๋ฒ์ ๋ฒํธ๋ฅผ ๊ณ ์ํ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ๋ ์ฌ๊ธฐ์ ์ญํธํ์ฑ์ ๋ํด ๊ฑฑ์ ํ ํ์๊ฐ ์์ต๋๋ค - ์๋ง๋ CDN์์ ์ด๊ฒ์ ์ ๊ณตํ๋ ์ฌ๋๋ค์ ์ ์ธํ๊ณ . ๊ทธ๋ฌ๋ CDN์์ momentjs๋ฅผ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ์ด์จ๋ ๋๋๋ก ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๋ฐ์ดํธํ๋ ๋ฐ ๊ด์ฌ์ด ์์ ๊ฒ์ ๋๋ค.
๋ค์ ๋ฉ์ด์ ๋ฒ์ ๋๋ ๊ทธ ์ดํ ๋ฒ์ ์์ ๋ถ๋ณ์ฑ์ ๊ฐ๋ ๊ฒ์ด ๋ก๋๋งต์ ์์ด์ผ ํ๋ค๊ณ ์ฃผ์ฅํ๊ณ ์ถ์ต๋๋ค.
๊ทธ๋์ ์ ๋ ๋ฐฉ๊ธ ์ด ๋ฌธ์ ์ ๋ถ๋ชํ ๊ฒ ๊ฐ์ต๋๋ค.
http://stackoverflow.com/questions/33002430/moment-js-formatting-incorrect-date
๊ทธ๋์ ์ ๋ ์ ๋ฐ์ ์ผ๋ก ๋ถ๋ณ์ฑ์ ์ง์งํฉ๋๋ค.
+1 ๋ถ๋ณ์ฑ
์ด ๋๋๊ณ ์์์น ๋ชปํ ํ๋์ผ๋ก ์ ๋
์ ์์์ต๋๋ค.
๋ช
ํํ๊ฒ ํ๊ธฐ ์ํด ํด๋นํ๋ ์ฃผ์ ๋ฒ์ ๋ณ๊ฒฝ์ผ๋ก ๋ถ๋ณ์ฑ์ ๋ํ ๋ ๋ค๋ฅธ +1์
๋๋ค.
+1 ๋ถ๋ณ์ฑ
์์ ํ ๋ถ๋ณ์ฑ์ ์ํด +1.
"๋๋ก๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๊ณ ๋๋ก๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ"์ผ๋ก ์ธํด ์์ค๋ ์ด ์๊ฐ์ ์์ ์๋นํ ํด ๊ฒ์
๋๋ค.
๊ทธ๋, ์ง์ฌ์ผ๋ก ๋ง์ด์ผ. ๋๊ฐ datetime ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ฑ๋ฅ์ ์ ๊ฒฝ์ ์ฐ๋์? ๋ง์น.. ์ ๋ง? ์ฌ์ฉ์์ 99.9%๋ ์๊ฒฉ์์๋ ์ข์ ์ฑ๋ฅ์ด ํ์ํ ์์ ์ ํ์ง ์๊ณ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋ ๊ฐ์ ๋ ์ง ๋๋ ์ต์ ์ ๊ฒฝ์ฐ ์๋ฐฑ ๊ฐ์ ๋ ์ง๋ฅผ ์ฒ๋ฆฌํฉ๋๋ค. ์ด๋น ์๋ฐฑ๋ง ๊ฐ์ ๋ ์ง๋ฅผ ์ฒ๋ฆฌํ๋ ์์์ ์ฌ์ฉ์๋ ์ต์ ํ๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ API ํฌ์ธํธ๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ถ๋ณ์ฑ์ ์ ์ผํ ์ ์์ ์ธ ๋์์ธ ์ ํ์ ๋๋ค. ๋ถ๋ณ ์ ํ์ ์ฌ์ฉํ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ๋ณ ์ ํ๋ณด๋ค ๋ฒ๊ทธ ๋ฐ์ ๊ฐ๋ฅ์ฑ์ด ํจ์ฌ ๋ฎ๋ค๋ ์ฌ๋ฌ ์ฐ๊ตฌ๊ฐ ์์ต๋๋ค.
๋ถ๋ณ์ฑ์ ์ํด +1. ๋ช ์๊ฐ์ด ๊ฑธ๋ ธ์ต๋๋ค.
๋ฌธ์ ์ ์ผ๋ถ๋ .startOf()
์ ๊ฐ์ ๋ฉ์๋ ์ด๋ฆ์ด ๊ธฐ๋ณธ ๊ฐ์ฒด์ ๋ณํ์ ์๋ฏธํ์ง ์๋๋ค๋ ๊ฒ์
๋๋ค.
๋๋ Moment๋ก ์ฑ๋ฅ ๋ณ๋ชฉ ํ์์ ๊ฒช์์ผ๋ฏ๋ก ์ด๊ฒ์ด ๋๋๋ก ๋ฐ์ํ ์ ์์์ ํ์ ํ ์ ์์ต๋๋ค.
๊ทธ๋ฌ๋ ๋๋ ๋ถ๋ณ์ ์๊ฐ์ด ๋ณธ์ง์ ์ผ๋ก ๋ ํจ์จ์ ์ผ ๊ฒ์ด๋ผ๊ณ ํ์ ํ์ง ์์ผ๋ฉฐ ๋ ํจ์จ์ ์ผ ๋ช ๊ฐ์ง ๊ฒฝ์ฐ๋ฅผ ์์ํ ์ ์์ต๋๋ค.
์ด ๋ ผ์์ ์ค๋ ์ ์ Java ์ธ๊ณ์์ ํด๊ฒฐ๋์์ต๋๋ค. ๋ถ๋ณ ๋ ์ง๊ฐ ์ด๊ฒผ๊ณ ๊ฐ์ฅ ์ธ๊ธฐ ์๋ ๊ตฌํ(JodaTime)์ด ๊ฒฐ๊ตญ Java 8์ ํ์ค ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ถ๊ฐ ๋์์ต๋๋ค.
Java 8์ LocalTime
์ "์ ์ฐ๋ฆฌ๋ _ํญ์_ ํ์ง ์์์ต๋๊น?" ์๊ฐ. ๋๋ ๊ธฐ์ ์ ๊ฑฐ์ ๋ณต์ํํ์ง ์์ง๋ง ์์งํ ๋งํ๋ฉด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ ์ง ๊ฐ์ฒด์ ๋ํ ์ฅ์ ์ ๋ณผ ์ ์์ต๋๋ค.
๊ทธ๋์, ์.... ์ด ์ค๋ ๋๊ฐ +1๋ก ๋์ณ๋๋ ๊ฒ์ด ์ซ์ง๋ง, ๋ฌธ์ ์ ์ง์ค์ Moment๊ฐ ์์ฑํ์ง ์๋ ๊ฒฝ์ฐ ๋ค๋ฅธ ๋๊ตฐ๊ฐ๊ฐ ๋ถ๋ณ JS ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ ๊ฒ์ด๋ผ๋ ์ ์ ๋๋ค.
๋๋ ์ต๊ทผ์ JodaTime API(์: Java 8 ๋ ์ง)์ ๋ง์ ๋ถ๋ถ์ JS๋ก ์ด์ํ๋ค๊ณ ์ฃผ์ฅํ๋ ์๋ก์ด npm ๋ชจ๋์ ๋ฐ๊ฒฌํ์ต๋๋ค.
์ด๊ฒ์ ๋ ธ๋์ ๋ธ๋ผ์ฐ์ ์ ๋ถ๋ณ์ฑ, LocalDate ๋ฐ LocalTime๊ณผ ๊ฐ์ ๊ฒ์ ๊ฐ์ ธ์ฌ ๊ฒ์ ๋๋ค.
Java์์ ์ด๋ฌํ ๊ฐ๋ ์ผ๋ก ์์ ํ ํ์๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ด ๋ณต์กํ๊ณ ๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.
๋งํฌ?
2015๋
12์ 11์ผ ๊ธ์์ผ ์คํ 4์ 30๋ถ Andrew Schmadel [email protected]
์ผ๋ค:
๋๋ ์ต๊ทผ์ ๋ง์ ๊ฒ์ ์ด์ํ๋ค๊ณ ์ฃผ์ฅํ๋ ์๋ก์ด npm ๋ชจ๋์ ์ฐ์ฐํ ๋ฐ๊ฒฌํ์ต๋๋ค.
JodaTime API(์: Java 8 ๋ ์ง)๋ฅผ JS๋ก ๋ณํํฉ๋๋ค.์ด๊ฒ์ ๋ถ๋ณ์ฑ, LocalDate ๋ฐ LocalTime๊ณผ ๊ฐ์ ๊ฒ์ ๊ฐ์ ธ์ฌ ๊ฒ์ ๋๋ค.
๋ ธ๋์ ๋ธ๋ผ์ฐ์ .Java์์ ์ด๋ฌํ ๊ฐ๋ ์ผ๋ก ์์ ํ ํ์๋ ๋ค๋ฅธ ๋ชจ๋ ๊ฒ์ด kludge-y๋ก ๋๊ปด์ง๋๋ค.
๋ฒ๊ทธ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์ต๋๋ค.โ
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/moment/moment/issues/1754#issuecomment -163964349.
์ํธ.
(๋ชจ๋ฐ์ผ๋ก ํ์ดํ, ๊ฐ๊ฒฐํ ๋ณ๋ช
)
๋๋ ์์ง ์ฐจ์๋ฒจ์ ์ธ๋ฆฌ์ง ์์๊ธฐ ๋๋ฌธ์ ์๊ฐ 3.0์ ๋ถ๋ณ์ฑ์ ์ฐฌ์ฑํ๋ค๊ณ ๋งํ ๊ฒ์
๋๋ค. ์ฃผ๋ก moment
์ ๊ฐ์ ๊ฐ์ฒด๋ _value ๊ฐ์ฒด_๋ก ๊ฐ์ฃผ๋๋ฏ๋ก ๋ถ๋ณ์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ด ๊ฐ์ฅ ์ข์ DDD ํํ ์ถ์ ์ด๊ธฐ ๋๋ฌธ์
๋๋ค.
์๋นํ ์ฑ๋ฅ ์ ํ๊ฐ ์๋๋ผ๋ ์ฌ์ ํ ํด์ผ ํ ์ผ์ ๋๋ค. ๋ชจ๋ฉํธ๋ ๋ค๋ฅธ ์ฌ๋์ ๋์์ธ์ ์์ฐ์ค๋ฝ๊ฒ ๋ง์์ผ ํฉ๋๋ค. ์ง๊ด์ ์ธ API๊ฐ ์ฑ๋ฅ์ ๋ฅ๊ฐํ๋ฉฐ IMHO(๊ฐ ๊ฐ์ฒด์ ๋ํ ๋ณํ)๋ ์ง๊ด์ ์ด์ง ์์ต๋๋ค.
๋๋ ๋ํ moment 3.0์ด Date
๊ฐ์ฒด์ ๋ํ ์ข
์์ฑ์ ์ ๊ฑฐํด์ผ ํ๋ค๊ณ ์๊ฐํ์ง๋ง ๊ทธ๊ฒ์ ๋ค๋ฅธ ์ค๋ ๋์ ๋ํ ํ ๋ก ์
๋๋ค.
๋๋ ์ฌ๊ธฐ @mj1856์ ์์ ํ ๋์ํฉ๋๋ค.
๋๋ ์๊ฐ ์ธ์คํด์ค์์ Object.freeze
๋ฅผ ์ฌ์ฉํด ์์ผ๋ฉฐ ์ด๊ฒ์ ์ผ๋ฐ์ ์ผ๋ก ๋ด๊ฐ ํ์๋ก ํ๋ ๊ฒ์ ๋ฌ์ฑํ์ต๋๋ค. ๋ค์์ด ์คํจํ๋ค๋ ๊ฒ์ ๋ฐฉ๊ธ ๋ฐ๊ฒฌํ ๊ฒฝ์ฐ๋ฅผ ์ ์ธํ๊ณ :
let now = Object.freeze(moment());
if (now.isSameOrBefore(anotherTime)) { // throws exception
}
์์ธ:
TypeError: Can't add property _isValid, object is not extensible
at valid__isValid (C:\git\quick-test\node_modules\moment\moment.js:93:24)
at Moment.moment_valid__isValid [as isValid] (C:\git\quick-test\node_modules\moment\moment.js:2195:16)
at Moment.isSame (C:\git\quick-test\node_modules\moment\moment.js:1945:44)
at Moment.isSameOrBefore (C:\git\quick-test\node_modules\moment\moment.js:1962:21)
์ํ๋ ๊ฒฝ์ฐ Object.freeze
์ฌ์ฉํ ์ ์๋๋ก ์์ ํ ์ ์์ต๋๊น?
@wmertens ๋๋ ์ด๊ฒ์ด ์ด๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํฉ๋๋ค : https://github.com/pithu/js-joda
@ichernev , @mj1856 , ์ ์ ๋์ ๋ชจ๋ฉํธ ์ฝ์ด ๊ฐ๋ฐ์ ์ฐธ์ฌํ์ง ์์๊ณ ๋ถ๋ณ์ฑ์ ์๋นํ ๊ด์ฌ์ด ์์ด ์ด์ ์ ์ฅ์ ์ฒ ํํฉ๋๋ค.
๋ด๊ฐ ์ด๊ฒ์ ๋ํ ์ ์ผํ ์ฐจ๋จ์์ธ์ง ํ์คํ์ง ์์ง๋ง 3.0์ ๋ถ๋ณ์ฑ์ผ๋ก ์์ผ๋ก ๋์๊ฐ๋ ๊ฒ์ด ํธ์ํฉ๋๋ค.
@gabrielmaldi @wmertens ๋ค. ๊ทธ๊ฑฐ์๋ค. ๊ฒฝ๊ณ์ ์ด ๋ง์ง ์๋ ๋๊ธ์ ๋ํด ์ฌ๊ณผ๋๋ฆฝ๋๋ค. ๋ฐ์ฏค ์์ฑ๋ ๊ฒ์๋ฌผ์์ ๋ถ๋ช ํ '์ ์ถ' ๋ฒํผ์ ํด๋ฆญํ์ต๋๋ค.
์๊ฐ๋ฆฐ ์๊ฐ์ ์ ๋ฆฌํ์๋ฉด ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
๋ถ๋ณ์ฑ์ ์ํด +1์ ํ๊ณ ๊ฒฐ๊ณผ์ ์ผ๋ก ๋ ์ ํํ ์ฝ๋๋ฅผ ๋ง๋ญ๋๋ค.
๊ทธ๊ฒ์ ํฐ ๋ ธ๋ ฅ์ด ๋ ๊ฒ์ด๋ฏ๋ก ๊ทธ๊ฒ์ ๊ฐ๋ฅํ๊ฒ ํ (๊ทธ๋ฆฌ๊ณ ๊ทธ๋ ๊ฒ ํด์์) ์ฌ๋๋ค์๊ฒ ์ง์ฌ์ผ๋ก ๊ฐ์ฌํฉ๋๋ค.
Moment๋ @butterflyhug ์ https://github.com/WhoopInc/frozen-moment ์ ์ ์ฌํ๊ฒ ๊ตฌํ๋์ด ์๋ค๊ณ ๊ฐ์ ํ ๋ ๋ค์๊ณผ ๊ฐ์ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์คํ ๊ฐ๋ฅํ ๊ฒ์ผ๋ก ์๊ฐ๋ ์ ๋๋ก ๋๋ฆฌ ์ฌ์ฉ๋ฉ๋๋ค.
3.x: ์ต์
์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ผ๋ฉฐ ๊ธฐ๋ณธ๊ฐ์ false์ด๋ฉฐ ์ ์ญ ๋ชจ๋ฉํธ ๋ด๋ณด๋ด๊ธฐ์ ํ๋๊ทธ๊ฐ ์ค์ ๋์ด true๋ก ์ค์ ๋ฉ๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋ก๋ ์ console.warn(๊ฐ๋ฐ ๋ชจ๋์์)
4.x: ์ต์
์ผ๋ก ๋ถ๋ณ, ๊ธฐ๋ณธ๊ฐ์ true, ํ๋๊ทธ๋ ์ฌ์ ํ false๋ก ์ค์ ํ ์ ์์ต๋๋ค. console.warn 5.x ์ผ์ ์ ๋ํ ๊ฒฝ๊ณ (๊ฐ๋ฐ ๋ชจ๋์์)
5.x: ์ ์ผํ ๋ฐฉ๋ฒ์ผ๋ก ๋ถ๋ณ
์ฅ๊ธฐ ๋ถ๋ณ์ฑ ๋น์ ์ ์ค๋ช ํ๋ ํ์ด์ง๋ฅผ ์์ ๋๊ณ ์ค์์ ๋ฐฐ์นํ์ญ์์ค. ์๋ฅผ ๋ค์ด 3.x/4.x/5.x ๊ฐ์๋ฅผ ๋ฐ๋ผ 1๋ ์ ํ ๋ฒ์ ์ฃผ์ ๋ฆด๋ฆฌ์ค๋ฅผ ํ๋ฉด ํฉ๋ฆฌ์ ์ผ๋ก ์ ๊ณต๋ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ํฅ์ ๋ฐ๋ ๋ชจ๋ ์ฌ๋์ด ์ฝ๋๋ฅผ ์ ๋ฐ์ดํธํ ์ ์๋ ๊ธ์ก์ ๋๋ค.
๋ช ๊ฐ์ง ๊ด์ฐฐ:
์ฆ, ๋๋ ์ฌ์ ํ ์ฌ๋๋ค์ด frozen-moment๋ฅผ ์ฌ์ฉํ ๋ ๋ฐ๊ฒฌํ๋ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ ๋ฐ ๋์์ ์ค ์ํฅ์ด ์์ต๋๋ค. ๊ทธ ๋ฒ๊ทธ๊ฐ ์ ๊ฒ์ด๋ , ์๊ฐ์ด ๋ณ๊ฒฝ๋์ง ์์ ๊ฐ๋ฅ์ฑ์ ์ ํ ๊ณ ๋ คํ์ง ์์ ๋ค๋ฅธ ์๊ฐ ํ๋ฌ๊ทธ์ธ์ด๋ ์๊ด์์ด ๋ง์ ๋๋ค. frozen-moment์ ๋ฌธ์ ๋ฅผ ์ ์ถํ๋ฉด ์ดํด๋ณด๊ฒ ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๋๋ ์ฌ์ ํ ์ ์ง๋ ์๊ฐ๊ณผ ๊ฐ์ ๊ฒ์ ๋ํ ์ปค๋ฎค๋ํฐ์ ๋ ธ๋ ฅ์ด ๋ถ๋ณ์ ์๊ฐ์ผ๋ก์ ์ ํ์ ๊ณ ํต์ ์ดํดํ๊ณ ์ํํ๋ ๋ฐ ๋์์ด ๋ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค.
clone()
๋ชจ๋ ๊ณณ์์ ์ด ๊ฐ๋ณ์ฑ ๋ํผ๋ ๋์ ์์์ ์ผ๋ก ๋ด๋ถ ์ฐธ์กฐ๋ฅผ ์๋ก์ด ๋ถ๋ณ โโ๋ชจ๋ฉํธ ๊ฐ์ผ๋ก ๋ณ๊ฒฝํฉ๋๋ค. ์ด๊ฒ์ ๋ํ ๋๊ท๋ชจ ์ฝ๋๋ฒ ์ด์ค์์ moment๋ฅผ ์ฌ์ฉํ๋ ์ฌ๋๋ค์ ์ํ ์ ํ์ ์ฝ๊ฒ ํ๋ ๋ฐ ๋์์ด ๋ ์ ์์ต๋๋ค.@butterflyhug - frozen-moment๋ฅผ ๋ง๋ค์ด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค! ๋๋ ๊ทธ๊ฒ์ ๋ฐ๊ฒฌํ์ ๋ ๊ธฐ๋ปค์ง๋ง, ์ง์์ด ์ค๋จ๋๋ฉด ๋ถ๋ณ์ ์๊ฐ์์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์๊ฐ์ผ๋ก ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ด ์ฝ๋์์ ํฐ ์ผ์ด ๋ ๊ฒ์ด๋ผ๋ ์ ์ ๊ฐ์ํ ๋ ๋ด ํ๋ก์ ํธ์์ frozen-moment๋ก์ ์ข ์์ฑ์ ๋์ ํ๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ์ต๋๋ค. ๋น์ ์ ๋ชฉํ๊ฐ ํผ๋๋ฐฑ์ ๋ฐ๋ ๊ฒ์ด๊ณ ๋น์ ์ด ๊ทธ๊ฒ์ ์ ๊ทน์ ์ผ๋ก ์ง์ํ๋ค๋ฉด ๋๋ ๊ทธ๋ ๊ฒ ํ๋ ๊ฒ์ด ๋ ํธํฉ๋๋ค. :-)
์ผ๋ง๋ ๋ง์ ๋ค๋ฅธ ์ฌ๋๋ค์ด ๊ฐ์ ์ฌ๊ณ ๊ณผ์ ์ ๊ฒช์๋์ง ๋ชจ๋ฆ ๋๋ค.
์ฌ๊ธฐ ์ฌ๋๋ค์ด ์ฑ๋ฅ์์ ์ด์ ๋ก Date
๊ฐ์ฒด์ ๋ํ ์ข
์์ฑ์ ๊นจ๋ ๊ฐ๋
(๋๋ ์ผ์ข
์ ์ง์ฐ ํ๊ฐ ์ถ๊ฐ)๊ณผ ํจ๊ป ๋ถ๋ณ์ฑ์ ํ๊ตฌํด์ผ ํ๋ค๊ณ ์๊ฐํ๋์ง ๊ถ๊ธํฉ๋๋ค.
@schmod์์ ํ ๋ฒ์ ํ ๋จ๊ณ์ฉ ์งํํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ์ด๊ฒ์ ์ด๋ฏธ (๋ถ๋ช ํ) ํฐ ๋ณํ์ ๋๋ค
@RobertMcCarter ๋ต, ๋ถ๋ณ์ฑ์ ์ํ ์ผ๋ถ ์ต์ ์ด ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ตฌํ๋ ๋๊น์ง/
๋ถ๋ณ์ฑ์ ๋ํด +1, endOf()๋ฅผ ์ฒ์ ์ฌ์ฉํ ํ ๋ด ์ฑ์ ๋ฌด์จ ์ผ์ด ์ผ์ด๋ฌ๋์ง ์์๋ด๋๋ฐ 30๋ถ์ด ์์๋์์ต๋๋ค. ๋ฌธ์๋ฅผ ์ฃผ์ ๊น๊ฒ ์ฝ์ง ์์๋ค๋ ์ ์ ๊ฐ์ํ ๋ ๋๋ ๊ทธ ์ด๋ฆ์ ๊ฐ์ง ๋ฉ์๋๊ฐ ์๋ฅผ ๋ค์ด endOf ์์ ๋ฐํํ๊ณ ์๊ฐ ์ธ์คํด์ค๋ ์ํฅ์ ๋ฐ์ง ์๋ ์ํ๋ก ๋ ๊ฒ์ด๋ผ๊ณ ๊ฐ์ ํ์ต๋๋ค. ์์งํ ๋งํด์ ๋๋ผ์ด ์ผ์ด๋ฉฐ ์ด๋ฐ ์ผ์ด ์ผ์ด๋์ง ์๋๋ค๋ ๊ฒ์ด ์ฐ์ค๊ฝ์ค๋ฝ์ต๋๋ค. ๋๋ ์ ์๊ฐ์๋ ๋๋ถ๋ถ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ API๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ์์ฒญ๋ ์ด์ ์ ์ ๋จธ๋ฆฌ๊ฐ ๋๋ฌด ์ต์ํฉ๋๋ค.
๋ถ๋ณ์ฑ์ ์ํด +1 :)
๋๋ ๋ถ๋ณ์ฑ์ ์ ๊ฒฝ์ฐ์ง ์๋๋ค. ์ด ํ๋ฅญํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๊ทธ๋ฅ ๋ด๋ฒ๋ ค ๋ฌ๋ผ!
@es6Test ๋ถ๋ณ์ฑ์ ๋์ํ์ง ์๋ ๊ทผ๊ฑฐ๋ ๋ฌด์์ ๋๊น? ๋ณํ์ ๋ํ ์ ํญ ์ธ์ ๊ตฌ์ฒด์ ์ธ ์ด์ ๊ฐ ์๋์?
+1
๋ด ์ฝ๋๊ฐ .clone() ๋ฉ์๋๋ก ๊ฐ๋ ์ฐจ ์๊ณ ๋๋๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅ์ฑ์ผ๋ก ์ธํด ๋ฒ๊ทธ๋ฅผ ์ฐพ๊ธฐ๊ฐ ๋งค์ฐ ์ด๋ ต๋ค๋ฉด ๋ณ๊ฒฝํ ์ ์๋ ๊ฒฝ์ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ์ด ์ฌ์์ง ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
+1 ๋ถ๋ณ์ฑ์ ๋์ฌ์ฃผ์ธ์ ^_^
@danpantry ๋ช ๊ฐ์ง ์ฑ์ ๋ ๋ง๋ค๊ณ ๋์ ์๊ฐ์ด ๋ฐ๋์์ต๋๋ค. ๋๋ ๋ถ๋ณ์ฑ์ ์ ํธํ๋ค.
๊ทธ๋ฌ๋ ์ฌ์ ํ ์ผ๋ถ ๋ณ์๋ฅผ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค๊ณ ์ถ์ต๋๋ค. ์ ๋ ์ข ์ข ์๊ฐ์ ๋ฉฐ์น ์ ์ถ๊ฐํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ์ ์งํ๊ธฐ ์ํด ๋ ๋ง์ ๋ณ์๋ฅผ ์์ฑํ๊ณ ์ถ์ง ์์ต๋๋ค.
@es6Test let
๋ฅผ _์ ๋ง_ ์ซ์ดํ๋ฉด ์ฌ์ฉํ์๊ฒ ์ต๋๊น?
let date = moment()
// with immutability
date = date.add(5)
์ ๋ ๋ถ๋ณ์ฑ์ ์ฐฌ์ฑํฉ๋๋ค. ์ด๊ฒ์ด Python์ datetime
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ ๊ฐ์ง ๊ธฐ๋ฅ์ผ๋ก ์ ๋ง ๋น์ ๋ฐํฉ๋๋ค. ๋ฌธ์์ด๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ๊ฐ์ฒด๋ฅผ ์์ ํ๋ ๊ฒ์ ๋ํด ๊ฑฑ์ ํ์ง ์๊ณ ๊ฐ์ฒด๋ฅผ ๋์ง ์ ์์ต๋๋ค.
React/Redux ์ธ๊ณ์์ ๋ถ๋ณ์ฑ์ ๋งค์ฐ ์ค์ํฉ๋๋ค. ์๊ฐ์ด ๋ณธ์ง์ ์ผ๋ก ๋ถ๋ณํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๋ฏธ ๋ช ๊ฐ์ง ์ง์ฆ๋๋ ๋ฌธ์ ์ ๋ถ๋ช์ณค์ต๋๋ค. ์ฑ๋ฅ์ ์ํ๋ ์ ์์ผ๋ฏ๋ก ์ฌ๊ธฐ์์๋ ๊ด๋ จ์ด ์์ต๋๋ค. Facebook์ ImmutableJs ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฑ๋ฅ ์ ํ ์์ด immutable์ ์ํํ ์ ์์์ ์ฆ๋ช ํฉ๋๋ค.
๋๋ ๋ํ ๋ถ๋ณ์ฑ์ ๋ํด +1์ ํ ๊ฒ์ ๋๋ค. ๊ทธ๋๊น์ง๋ ๋ถ๋ณ์ฑ์ ์ด์ ์ ์ป์ ์ ์์ผ๋ฏ๋ก ์ค๊ฐ์ ์ํํ๋ ๊ฒ์ ์๋ฏธ๊ฐ ์์ต๋๋ค.
๋ถ๋ณ์ฑ๊ณผ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ์ ๊ทธ ์ด๋ ๋๋ณด๋ค ๋ ๋ง์ด ์ฌ์ฉ๋๊ณ ์์ต๋๋ค(๊ทธ๋ฆฌ๊ณ ์ ๋ ๊ทธ๊ฒ์ ์ข์ํฉ๋๋ค). ๋๋ ์ด ์ด๋์ ํฐ๋ธ์ ๊ธฐ์ฌํ๊ธฐ ์ํด ์๊ฐ์ ํ ์ ํ ๊ฒ์ ๋๋ค. ๊ธฐ์ฌ์๋ ์ ์๊ฒ ์ฐ๋ฝํ์ฌ ์ ๊ฐ ์ด๋ป๊ฒ ๋์ธ ์ ์๋์ง ์๋ ค์ฃผ์ธ์.
์ฐ๋ฆฌ๊ฐ ๋ง์ ๊ด์ฌ์ ๊ฐ์ง๊ณ ์์๊ธฐ ๋๋ฌธ์ ํ์ ์ด์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๊ณ ์ถ์์ต๋๋ค.
ํ์ฌ ๊ทํ์ ์ฐ๋ ค ์ฌํญ์ ๋ค์์์ ์๋ ค๋๋ฆฝ๋๋ค. ์ ์ฒด ์ ์ง ๊ด๋ฆฌ์ ํ์ ์ฐ๋ฆฌ๊ฐ ์ฒ์๋ถํฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์์ฑํ๋ค๋ฉด ๋ณ๊ฒฝํ ์ ์๋๋ก ์ ํํ ๊ฒ์ด๋ผ๋ ๋ฐ ๋์ํฉ๋๋ค. ๊ทธ๋ฌ๋ ์ง๊ธ์ ๊ทธ๋ ์ง ์์ต๋๋ค.
๊ทธ๋๋ก, ์ฐ๋ฆฌ๋ ๋ค๋ฅธ ์ฑ๋์ ํตํด ์๊ฐ์ ์ป๋ ๋ฐ ์์กดํ๋ ์ ์์๋ ์์ ์ฌ์ฉ์์ ํจ๊ป ํ ๋ฌ์ 4๋ฐฑ๋ง ๊ฐ์ NPM ๋ค์ด๋ก๋๊ฐ ์์ต๋๋ค. ์ด ๋ชจ๋ ์ฌ์ฉ์๋ ํ์ฌ์ ๊ฐ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์๊ฐ์ ์์ํ๋ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๋ํ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์๊ฐ์ ์์กดํ๋ ๋ง์ ํ๋ฌ๊ทธ์ธ์ด ์์ต๋๋ค.
์ฝ๋๋ ์์ฑํ๊ธฐ ์ถฉ๋ถํ ์ฝ์ง๋ง ์ด๋ฌํ ์ข ๋ฅ์ ๋ณ๊ฒฝ์ ๋ํ ์ง์ ์๊ตฌ๋ ์ฌ๊ฐ ์๊ฐ์ ์ด ์์ ์ ์ํํ๋ ์๊ท๋ชจ ํ์ผ๋ก ์ํํ๊ธฐ ์ด๋ ต์ต๋๋ค. ์ฆ, ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ณ ๋ คํ ์ฉ์๊ฐ ์์ต๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ๊ถ๊ธํฉ๋๋ค:
frozen moment ํ๋ฌ๊ทธ์ธ์ ๋ฌธ์ ๋ ์ตํธ์์์ด ์๋๋ผ ์ตํธ์ธ์ด๋ผ๋ ๊ฒ์
๋๋ค. ๋ชจ๋
moment() ๋ ๋ณ๊ฒฝํ ์ ์๋๋ก .freeze() ๊ฐ ํ์ํฉ๋๋ค.
๋ถ๋ณ์ฑ์ ์์ ์ ๊ฐ์ฒด X๊ฐ ์์ ๋
๋ช
์์ ์ผ๋ก ๋ณ๊ฒฝ ๊ฐ๋ฅํ๊ฒ ๋ง๋ค์ง ์๋ ํ ๋ณ๊ฒฝ๋์ง ์์์ผ ํฉ๋๋ค.
ํ์ง ์๊ณ ๋ด๋ถ์ ์ผ๋ก ๊ฐ์ฒด๋ฅผ ๋ณ๊ฒฝํ ์ ์๋ ๋ชจ๋ ๊ณต์ฉ ๊ธฐ๋ฅ
๋ช
์์ ๋ณ๊ฒฝ์ด ๋ฌธ์ ์
๋๋ค.
ํ ๊ฐ์ง ํด๊ฒฐ ๋ฐฉ๋ฒ์ ์ฌ๋ฌ ๊ฐ์ง๋ฅผ ์ํํ๋ ๊ฒ์ ๋๋ค.
๋ชจ๋๋ฅผ ๋ง์กฑ์ํฌ ๊ฒ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๋ป๊ฒ ์๊ฐํ๋์?
2016๋
5์ 23์ผ ์์์ผ ์คํ 12:11, Maggie Pint [email protected]
์ผ๋ค:
์ฐ๋ฆฌ๊ฐ ๋๋ฌด ๋ง์ ๊ฒ์ ๊ฐ์ง๊ณ ์๊ธฐ ๋๋ฌธ์ ํ์ ์ด๊ฒ์ ๋ํ ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๊ณ ์ถ์์ต๋๋ค.
๊ด์ฌ.ํ์ฌ ๊ทํ์ ์ฐ๋ ค ์ฌํญ์ ๋ค์์์ ์๋ ค๋๋ฆฝ๋๋ค. NS
์ ์ฒด ์ ์ง ๊ด๋ฆฌ์ ํ์ ์ฐ๋ฆฌ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ
๊ทผ๋ณธ์ ์ผ๋ก, ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๋ถ๋ณ์ผ๋ก ๋ง๋ค๊ธฐ๋ก ์ ํํ ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋, ๊ทธ๊ฒ์ ๋ฐฉ๋ฒ์ด ์๋๋๋ค
๋ฐ๋ก ์ง๊ธ์ ๋๋ค.ํ์ฌ ์ํ๋ก, ์ฐ๋ฆฌ๋ ํ ๋ฌ์ 4๋ฐฑ๋ง ๊ฐ์ NPM ๋ค์ด๋ก๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
๋ค๋ฅธ ์ฌ๋์ ํตํด ์๊ฐ์ ์ป๋ ๋ฐ ์์กดํ๋ ์ ์ ์๋ ์ฌ์ฉ์ ์
์ฑ๋. ์ด ๋ชจ๋ ์ฌ์ฉ์๋ ๋ค์๊ณผ ๊ฐ์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์๊ฐ์ ์์ํ๋ ์ฝ๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค.
์ค๋์ด๋ค. ๋ํ ์๊ฐ์ ์์กดํ๋ ๋ง์ ํ๋ฌ๊ทธ์ธ์ด ์์ต๋๋ค.
๋ณํ๊ธฐ ์ฌ์ด.์ฝ๋๋ ์์ฑํ๊ธฐ ์ถฉ๋ถํ ์ฝ์ง๋ง ์ด๋ฌํ ์ข ๋ฅ์ ์ง์์ด ํ์ํฉ๋๋ค.
์์ ํ์ด ์ฐ๋ฆฌ์ ์ฌ์ ๊ณต๊ฐ์์ ์ด๊ฒ์ ํ๊ธฐ ๋๋ฌธ์ ๋ณํ๋ฅผ ๋ฐ์๋ค์ด๊ธฐ๊ฐ ์ด๋ ต์ต๋๋ค.
์๊ฐ. ์ฆ, ์ฐ๋ฆฌ๋ ๊ทธ๊ฒ์ ๊ณ ๋ คํ ์ฉ์๊ฐ ์์ต๋๋ค. ํ์ง๋ง ์ฐ๋ฆฌ๋ ๊ถ๊ธํฉ๋๋ค:
- ์ ์ง๋ ์๊ฐ ํ๋ฌ๊ทธ์ธ์ด ์๊ตฌ ์ฌํญ์ ์ถฉ์กฑํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น?
- ๋ณ๊ฒฝํ ์ ์๋ API(ํญ์
ํด๋ก ), ๋๋ ์ด๋ค ์ด์ ๋ก ๋ด๋ถ์ ์ผ๋ก ์ง์ ์ผ๋ก ๋์ฐ๋ณ์ด๋ฅผ ์ผ์ผํค์ง ์์์ผ ํฉ๋๊น?
์ฌ๋ฌผ?- ํ์ฌ ์ฝ๋์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ ๋ฒ์งธ API๋ฅผ ์ถ๊ฐํ๋ฉด
ํ์?โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/moment/moment/issues/1754#issuecomment -221062274
Gmail ๊ณ์ ์ Eric Lau
@maggiepint์ ์๋ตํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
start = moment();
end = start.add(10, 'minutes');
import "moment/immutable";
start = moment();
end = start.add(10, 'minutes'); // immutable version of add
๋ด ์๊ฐ์ ์ด ์ ๊ทผ ๋ฐฉ์์ ๋ณ๊ฒฝํ ์ ์๋ API๋ฅผ ์ฌ์ฉํ๋ ค๋ ์ฌ๋๋ค์ ์ํ ์ฐ์ํ ์ ๊ทธ๋ ์ด๋์ ์ ํฉํฉ๋๋ค. ๊ธฐ์กด ์ฝ๋๋ ๊ณ์ ์๋ํ๊ณ , ์๋ฌด๋ ๊ฐ์ ๋ก ์ ๋ ฅ๋์ง ์์ผ๋ฉฐ, ๋ณ๊ฒฝํ ์ ์๋ API๋ฅผ ์ฌ์ฉํ๋ ค๋ ์ฌ๋๋ค์๊ฒ๋ ๋ณ๊ฒฝ์ด ๋ ํ์ํฉ๋๋ค.
์ฐ๋ฆฌ๋ ์ฝ๋ ๋ถ์์ฉ์ ์์ ๋ ค๋ ๋ชจ๋ ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ธฐ๋ณธ ํจํด์ ํ์ฌ ํจ์์ ์ฐ๊ฒฐํ์ฌ ํด๋ก ์ ํธ์ถํ ๋ค์ ํด๋น ํด๋ก ์์ ์๋ํ๋ ๊ฒ์ ๋๋ค.
ํ์ง๋ง ๊ธฐ์ ์ ์ผ๋ก ์ ๋ง ๋ณ๊ฒฝํ ์ ์๋ ์ฝ๋๋ฅผ ๋ง๋๋ ๊ฒฝ์ฐ ๊ฐ์ฒด๋ ๋ณ๊ฒฝ๋์ง ์๋ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด ์ด ๋ณ๊ฒฝ์ ์ํํ๋ ๋ฐ ์ด๋ ค์์ด ์ฆ๊ฐํฉ๋๋ค. ํด๋ก ์ ํธ์ถํ ๋ค์ ์ด์ ์ ํ๋ ์ผ์ ํ๋ ๊ฒ์ด ํจ์ฌ ์ฝ์ต๋๋ค.
๋๋ Drew์ ์์ด๋์ด๋ฅผ ๋ ๋ฒ์งธ๋ก:
"์๊ฐ/๋ถ๋ณ" ๊ฐ์ ธ์ค๊ธฐ;
์์ = ์๊ฐ();
๋ = start.add(10, '๋ถ'); // add์ ๋ถ๋ณ ๋ฒ์
๊ทธ๊ฒ์ ๋ถ๋ณ์ ์ตํธ ์์์ด๊ณ ๋ณ๊ฒฝ ์ฌํญ์ด ์๊ธฐ ๋๋ฌธ์ ์ข์ ๊ฒ์
๋๋ค.
ํจ์ ์ด๋ฆ.
2016๋
5์ 23์ผ ์์์ผ ์คํ 12์ 53๋ถ, Maggie Pint [email protected]
์ผ๋ค:
์ฐ๋ฆฌ๋ ์ฝ๋ ๋ถ์์ฉ์ ์์ ๋ ค๋ ๋ชจ๋ ์๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ธฐ๋ณธ
ํจํด์ ํ์ฌ ํจ์์ ์ฐ๊ฒฐํ์ฌ ํด๋ก ์ ํธ์ถํ๋๋ก ํ๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฐ ๋ค์ ํด๋น ํด๋ก ์์ ์์ ํฉ๋๋ค.์๋ฐํ ๋งํ๋ฉด, ์ง์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ ์ฝ๋๋ฅผ ๋ง๋ค๊ณ ์๋ค๋ฉด ๊ฐ์ฒด๋
๋ณ๊ฒฝ๋์ง ์๋ ๊ฐ์ผ๋ก ๊ตฌ์ฑ๋์ด์ผ ํฉ๋๋ค. ๊ทธ๋ ๊ฒ ํ๋ฉด
๊ทธ๋ฌ๋ ์ด ๋ณ๊ฒฝ์ ์ํํ๋ ๋ฐ ์ด๋ ค์์ด ์ฆ๊ฐํฉ๋๋ค. ํจ์ฌ ์ฝ์ต๋๋ค
ํด๋ก ์ ํธ์ถํ ๋ค์ ์ด์ ์ ํ๋ ์์ ์ ์ํํฉ๋๋ค.โ
๋น์ ์ด ๋๊ธ์ ๋ฌ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์ ๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ํ์ธํ์ธ์.
https://github.com/moment/moment/issues/1754#issuecomment -221076796
Gmail ๊ณ์ ์ Eric Lau
@ericlau-์๋ฆฌ๋
- ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ชจ๋๋ก ์ค์ ๋ ๊ฒฝ์ฐ ์ ์ญ moment() ์ค์ ์ด ์์ต๋๋ค.
์์ฑ๋ moment() ์ธ์คํด์ค๋ ๋ณ๊ฒฝํ ์ ์์ต๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํธ์ถ์ด ์๋๋๋ฉด
๋ณ๊ฒฝ๋์ง ์๊ณ ๋์ ๋ถ๋ณ์ ์ฌ์ฉํ๊ธฐ ์ํ ์ ์ ํ ๋ฉ์์ง์ ํจ๊ป ์ค๋ฅ๊ฐ ๋ฐ์ํฉ๋๋ค.
API ํธ์ถ.
ํ์ด์ง์ ์๋ 2๊ฐ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๊ฐ์ ์ผ๋ก ๋ค๋ฅธ ๋์์ ์์ํ๋ฉด ์ค๋จ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์๊ฐ์ ์์ํ๋ datepicker๋ฅผ ์ฌ์ฉํ๊ณ ์์ ์ ์ฝ๋๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์๊ฐ์ ์์ํฉ๋๋ค. ์๋ํ์ง ์์ต๋๋ค.
๋ณ๊ฒฝํ ์ ์๋ API ์ฌ์ฉ(์ผ๋ผ ์ผ์ด๋ถ์ ์๊ฐ)
ํ๋ฌ๊ทธ์ธ์ด ์๋ํ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ๋ ์๋ฒฝํ์ง ์์ต๋๋ค. ์ฌ์ค, ๋ถ๋ณ์ฑ์ ๋์ ํ๊ณ ๊ธฐ์กด์ ๋ชจ๋ ํ๋ฌ๊ทธ์ธ์ ๊ธฐ๋ฅ์ ์ผ๋ก ์ ์งํ๋ ๋ฐฉ๋ฒ์ ์์ต๋๋ค. ํ๋ฌ๊ทธ์ธ์ ๋๊ตฐ๊ฐ๊ฐ ์๋ํ๋๋ก ์๊ฐ์ ๋ณด๋ด๊ธฐ ์ ์๋ ์ ํ ์๋ํ์ง ์๊ฑฐ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์๊ฐ์ ์๋ํ์ง ์์ต๋๋ค.
"์๊ฐ/๋ถ๋ณ" ๊ฐ์ ธ์ค๊ธฐ;
๋ฐ๋ผ์ ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฌํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ํ๋ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก , ์ฝ๋๋ฅผ ์์์ํค์ง๋ ์์ง๋ง ํผ๋์ ์ผ๊ธฐํ๊ณ ์ผ๋ถ ํ๋ก์ ํธ์ 2๊ฐ์ ๋ฒ์ ์ด ์ค์น๋๋๋ก ๋ง๋ค ์ ์์ต๋๋ค(์๋ฅผ ๋ค์ด datepicker๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์ฝ๋๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค).
๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ API๋ฅผ ํ์ฌ API์ ๊ฑฐ์ ๋น์ทํ์ง๋ง ๋ณ๊ฒฝํ ์ ์๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ ๋๋ค. ํฌํฌ๊ฐ ํ์ํ ์ ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๊ฒฐ๊ตญ ์์ ์ํํธ์จ์ด์ ๋ฐฉ์์ ๋๋ค.
"๋ ๋ฒ์งธ API ์ถ๊ฐ / ํ์ ๋ชจ๋ ๊ฒ์" ์ต์
์ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ ์ง์ ์ผ๋ก ์
๊ทธ๋ ์ด๋ํ ์ ์๊ธฐ ๋๋ฌธ์ ํธํ์ฑ์ ๊ฐ์ฅ ์ข์ต๋๋ค. ๊ฐ๋ฅํ๋ค๋ฉด moment()
(๋ชจ๋ ๋๋์ import moment;
๋๋ ๋ธ๋ผ์ฐ์ ๋น๋์ moment
์ ์ญ์ ํตํด)์ ์๋ฏธ๋ ์ ํ ๋ณ๊ฒฝ๋์ง ์์์ผ ํฉ๋๋ค. ์๋ง์ ๋ ๊ฑฐ์ ์ฝ๋๊ฐ ์์ต๋๋ค.
๋ค์์ ํ์ฉํ๋ ์๋ฃจ์ ์ธ IMO๊ฐ ์ด์์ ์ ๋๋ค.
import moment from 'moment';
import {immutable as immoment} from 'moment';
var a = moment(); // mutable moment
var b = moment().immutable(); // immutable moment
var c = immoment(); // also an immutable moment; shorthand
๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์๋์ง๋ง ๊ทธ๋ ์ต๋๋ค. ๋ ๊ฐ์ง ๋ณ๊ฐ์ ๊ณ ์ ํ ์ ํ์ ์๊ฐ์ด ์์ต๋๋ค. ๋ณ๊ฒฝ ๊ฐ๋ฅํ๊ณ ๋ณ๊ฒฝํ ์ ์๋ ์๊ฐ ๊ฐ์ฒด๊ฐ "๋ด๋ถ"์์ ์๋นํ ์์ ์ฝ๋๋ฅผ ๊ณต์ ํ๋ค๊ณ ๊ฐ์ ํ๋ฉด ๋ ๊ตฌ๋ฌธ์ ๋ชจ๋ ์ฌ์ฉํด์ผ ํ๋ ๊ฐ๋ฐ์๋ฅผ ์ํด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํฌ๊ธฐ๋ฅผ ํฌ๊ฒ ๋๋ฆด ํ์๊ฐ ์์ต๋๋ค. ์ ํ๋ฆฌ์ผ์ด์ ์ด ํ๋์ ๊ตฌ๋ฌธ๋ง ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํธ๋ฆฌ ์์ดํน ์ ์ฌ์ฉํ์ฌ ์ต์ ํ๋ ๋น๋๋ฅผ ์์ฑํ ์ ์์ต๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋ถ๊ธฐํ๋ฉด ๋๋ถ๋ถ์ ๊ฐ๋ฐ์๊ฐ ๋ก๋ํด์ผ ํ๋ ์ฝ๋ ํฌ๊ธฐ๊ฐ ์ ์ฌ์ ์ผ๋ก ๋ ๋ฐฐ๋ก ๋์ด๋ ๋๋ถ๋ถ์ ์น ์์ฉ ํ๋ก๊ทธ๋จ์ ๋ฐ๋์งํ์ง ์์ต๋๋ค.
ํ๋ฌ๊ทธ์ธ์ด "์ฆ์ ์ฌ์ฉ ๊ฐ๋ฅํ" ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์๊ฐ๊ณผ ํจ๊ป ์๋ํ๋ค๊ณ ๊ฐ์ ํ๋ ๊ฒ์ ์ข์ ์๊ฐ์ด ์๋๋ฉฐ ํฉ๋ฆฌ์ ์ธ ์๊ตฌ ์ฌํญ์ผ๋ก ๊ฐ์ฃผํ์ง ์์ต๋๋ค.
๋ํ ๋ณ๊ฒฝ ๊ฐ๋ฅํ API์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ API๊ฐ ๋์ผํด์ผ ํ๋ค๋ ํฉ๋ฆฌ์ ์ธ ์๊ตฌ ์ฌํญ/๊ฐ์ ์ด ์๋๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ฐ๋ฆฌ๋ ์ ๊ทธ๋ ์ด๋ ๊ฒฝ๋ก๋ฅผ ๊ฐ๋ฅํ ํ ๋งค๋๋ฝ๊ฒ ๋ง๋ค๊ธฐ ์ํด ๋ ธ๋ ฅํด์ผ ํ์ง๋ง ์ด์ํ ๊ตฌ๋ฌธ์ ์ฝ๋งค์ฌ์๋ ์ ๋ฉ๋๋ค.
๋ํ "๋ถ๋ณ" API๊ฐ ์ด๋ป๊ฒ ์๊ฒผ๋์ง์ ๋ํ ๋ ผ์/๋ ผ์์ ์ฌ์ง๊ฐ ๋ง๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋น๋ ํจํด? ์์ฑ์ ์ธ์คํด์คํ? ๊ฐ์น ๊ฐ์ฒด? ํ์ฌ API๋ฅผ ๊ตฌํํ์ง๋ง "setter" ๋ฉ์๋๊ฐ ๋ณต์ ๋ณธ์ ๋ฐํํฉ๋๊น?
์ ์ ํ ๊ฐ์ง ์์ฒญ์ ์๋ก์ด API๊ฐ ์ฐ๋ฆฌ๊ฐ ์์
ํ๊ณ ์๋ ์ด๋ค ์๊ฐ์ ๋ํด ๋ช
ํํ๊ณ ๋ชจํธํ์ง ์์์ผ ํ๋ค๋ ๊ฒ์
๋๋ค. IMO, freeze
๋ ํด๋น ํ
์คํธ์ ์คํจํ๊ณ ๋ด๊ฐ ์ ์ ์ง๋๊ฐ ๋๋ง๋ค clone()
๋ฅผ ํธ์ถํ๋ ๊ฒ ์ธ์๋ ๊ฑฐ์ ๋ณดํธ ๊ธฐ๋ฅ์ ์ ๊ณตํ์ง ์์ต๋๋ค.
๋ฐ๋ผ์ ์ด๊ฒ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ์ฌํ ์ธํฐํ์ด์ค๋ฅผ ๊ฐ์ง ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์ํ๋ ๊ฒ์ ๋๋ค. ๋ฌผ๋ก , ์ฝ๋๋ฅผ ์์์ํค์ง๋ ์์ง๋ง ํผ๋์ ์ผ๊ธฐํ๊ณ ์ผ๋ถ ํ๋ก์ ํธ์ 2๊ฐ์ ๋ฒ์ ์ด ์ค์น๋๋๋ก ๋ง๋ค ์ ์์ต๋๋ค(์๋ฅผ ๋ค์ด datepicker๋ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฒ์ ์ ์ฌ์ฉํ๊ณ ์ฝ๋๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ฒ์ ์ ์ฌ์ฉํฉ๋๋ค).
๋ณ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์๋๋ผ ๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋๋ฌ์ธ๊ณ ์๋ ์์ ๋ํผ์ผ ๋ฟ์ ๋๋ค. ํ ๊ฐ์ง ๋ฒ์ ์ moment๋ง ์ค์นํ๋ฉด ๋ฉ๋๋ค. '์๊ฐ/๋ถ๋ณ'์ ๊ฐ์ ธ์ฌ ์ ์๊ณ datepicker๋ ๋ฌธ์ ์์ด ๋์ผํ ํ๋ก์ ํธ์์ '์๊ฐ'์ ๊ฐ์ ธ์ฌ ์ ์์ต๋๋ค.
๋ณ๊ฒฝํ ์ ์๋ ์๊ฐ์ ์ฒ๋ฆฌํ๋๋ก ์ ๋ฐ์ดํธ๋์ง ์์ ๊ฒฝ์ฐ ์๊ฐ์ ๊ฐ์ ธ์ค๊ฑฐ๋ ๋ฐํํ๋ ํ๋ฌ๊ทธ์ธ๊ณผ ์ธํฐํ์ด์คํ๋ ๋ฐ ๋ฌธ์ ๊ฐ ์์ ์ ์์ต๋๋ค.
ํ์ฌ๋ก์๋ ๋ณ๊ฒฝํ ์ ์๋ ๊ฒ์ผ๋ก ์ทจ๊ธํ๋ ํ๋ฌ๊ทธ์ธ์ ๋ณ๊ฒฝํ ์ ์๋ ์๊ฐ์ ์ ๋ฌํ๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค. ํ๋ฌ๊ทธ์ธ์ด ์ ๋ฐ์ดํธ ๋ ๋๊น์ง ํ๋ฌ๊ทธ์ธ์ ์ ์ ์๊ฐ์ด ์ฃผ์ด์ง๊ธฐ ์ ์ ๋ณ๊ฒฝ ๊ฐ๋ฅ์ผ๋ก ๋ณํํ๋ ๋ฐฉ๋ฒ์ด ํ์ํฉ๋๋ค. ์ด์์ ์ผ๋ก๋ ํ๋ก์ ํธ ๋ฉ์ธํ ์ด๋๊ฐ ๋ถ๋ณ์ฑ์ ์ง์ํ ์๊ฐ์ ๊ฐ์ง ํ์ ๋ ์ด์ ์ฌ์ฉ๋์ง ์์ต๋๋ค. ๋ํ ๋ถ๋ณ์ฑ์ ๊ฐ์งํ๋ ๋ฐฉ๋ฒ์ด ํ์ํ ์๋ ์์ต๋๋ค(ํ๋ฌ๊ทธ์ธ ์์ฑ์์ ๊ฒฝ์ฐ).
๋ฐ๋๋ก ๋ถ๋ณ ์ธํฐํ์ด์ค๋ฅผ ์ฌ์ฉํ๋๋ก ์ ๋ฐ์ดํธํ๊ณ ์ฌ์ฉ์์๊ฒ ๋ถ๋ณ์ ์๊ฐ์ ๋ฐํํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ถ๋ณ์ ์ฌ์ฉํ์ง ์๊ณ ๋ถ๋ณ์ ์๊ฐ์ ๊ธฐ๋ํ์ง ์๋ ์ฌ๋๋ค์ ๋ฒ๋ฆด ์ ์์ต๋๋ค. ๋๋ ์ด๊ฒ์ด ๋ ์ด์ ์ฌ์ฉ๋์ง ์๋ ๋ณํ ๋ฐฉ๋ฒ์ผ๋ก๋ ์ฒ๋ฆฌํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ๋ฌ๊ทธ์ธ์ ์ ๋ฌ๋ ๊ฒ๊ณผ ๋์ผํ ์ ํ์ ์๊ฐ์ ๋ฐํํด์ผ ํฉ๋๋ค.
@maggiepint ์, ๊ทํ์ ์์ ์ ์ดํดํ์ง๋ง ๋๋ฌด ํฐ ๋์ฝ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ๊ฐ์ธ์ ์ผ๋ก ๋๋ ๋จ์ํ clone
๊ฐ ์ปคํผ ๋ค์ ์๋ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ๊ด์ฐฎ์ ๊ฒ์
๋๋ค. ํนํ ๊ผฌ์์ด ํด๊ฒฐ๋๋ ๋์.
@tacomanator ์ ๋ ํ๊ณ ์ถ์ ์ผ์
๋๋ค. ๋ด๋ถ์ ์ผ๋ก ๋ชจ๋ ๊ฒ์ ๋ณ๊ฒฝํ ์ ์๋๋ก ๋ค์ ์คํํ๋ ๊ฒ์ ๊ทธ๋ค์ง ์ ์งํ๊ธฐ ์ด๋ ต์ต๋๋ค.
๋๋ ๋จ์ง ์ด๋ค ์ด์ ๋ก ์ฌ๋๋ค์ด ๊ทธ๊ฒ์ ์ํ๋์ง ๋ชฐ๋์ต๋๋ค.
@schmod freeze
๊ฐ ๋ช
ํํ๊ณ ๋ชจํธํ์ง ์์ API๋ผ๊ณ ์๊ฐํ์ง ์๋ ์ด์ ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํด ์ฃผ์๊ฒ ์ต๋๊น?
ํจ์ ์ด๋ฆ์ด ๋๋ฌด ๊ท์ฌ์ฐ๋ฉด Frozen Moment์ ๋ฉ์๋ ์ด๋ฆ์ ํด๋น ์ ์ฅ์์ ๋ฌธ์ ๋ก ๋ฐ๊พธ๋ ๋ฐ ๋ํ ๋ ผ์์ ๊ณ ๋ คํด ๋ณด๊ฒ ์ต๋๋ค. ๋ฐ๋ฉด์ ๋ณ๊ฒฝ ๊ฐ๋ฅ์์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅ์ผ๋ก(๊ทธ๋ฆฌ๊ณ ๊ทธ ๋ฐ๋๋ก) ๋ณํํ๋ ๊ฒ์ด ๊ฐ๋ฅํ์ง ์์์ผ ํ๋ค๊ณ ์๊ฐํ๋ค๋ฉด ์ฌ๊ธฐ์์ ์ฝ๊ฐ์ ํ ๋ก ์ด ํ์ํ ์ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ํ์ง๋ง ์ ๋ Frozen Moment๋ ๊ธฐ๊บผ์ด ๋ฐ์๋ค์ผ ์ํฅ์ด ์์ต๋๋ค. ๊ทธ๊ฒ์ด ๋ ๋์ API๊ฐ ๋ ๊ฒ์ด๋ผ๋ ๋๋ต์ ์ธ ํฉ์๋ฅผ ์ป๋๋ค๋ฉด ๊ทธ ๋ฐฉํฅ์ผ๋ก.
@maggiepint ๊ธฐ๋ณธ์ ์ผ๋ก Frozen Moment์ ์ผ๋ถ ๋๋ ์ ์ฒด๋ฅผ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ฒ๋ค๋ก ๋ฌถ๋ ๊ฒ์ผ๋ก "ํ์ฌ ์ฝ๋์ ๋ ๋ฒ์งธ, ๋ณ๊ฒฝํ ์ ์๋ API ์ถ๊ฐ"๋ฅผ ์ฝ๋ ๊ฒ์ด ๋ง์ต๋๊น? ๋์์ด ๋๋ค๋ฉด Frozen Moment ๋๋ ๊ทธ ์์ด๋์ด์ ์ผ๋ถ๋ฅผ ์๊ฐ ์กฐ์ง์ผ๋ก ๋ง์ด๊ทธ๋ ์ด์ ํ๊ณ (๊ณต์ ํ๋ฌ๊ทธ์ธ ๋๋ ํต์ฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ์ผ๋ถ๋ก) ์๋ก์ด ์ปจํ ์คํธ์์ ์ ์ง ๊ด๋ฆฌ๋ฅผ ๋๊ฒ ์ต๋๋ค.
@butterflyhug @ichernev ๊ฐ ์๊ฐํ ๊ฒ์ ์ ํํ ๋ง์ํ๊ณ
@butterflyhug
freeze
๋ ์ข์ ์ด๋ฆ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์๊ฐ์ _๋ชจ๋ ๋จ์ผ_ ํธ์ถ ํ์ ์ด ์ด๋ฆ์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ธฐ์ตํด์ผ ํ๋ค๋ ๊ฒ์ ์ ๋ง ์ง์ฆ๋๋ ์ผ์
๋๋ค.
๋๋ ๋ํ import 'moment/immutable'
์๋ ๊ฐ์ ๋ฌธ์ ๊ฐ ์๋ค๊ณ ์๊ฐํฉ๋๋ค. ์์ด ๋ฒ๋ฆฌ๊ธฐ ์ฝ์ต๋๋ค.
์์งํ, ๋น์ ์ semver๋ฅผ ๋ฐ๋ฅด๊ณ ์์ต๋๋ค. ์ฌ๋ฐ๋ฅธ ์ ๊ทผ ๋ฐฉ์์ ๋ชจ๋ ๊ฒ์ด _๊ธฐ๋ณธ์ ์ผ๋ก_ ๋ถ๋ณ์ ์ฌ์ฉํ๋๋ก ํ๊ณ ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์์ฒด ์ฃผ์ ๋ฒ์ ์ผ๋ก ๋ฆด๋ฆฌ์คํ๋ ๊ฒ์ด๋ฉฐ ์ผ์ ๊ธฐ๊ฐ(12๊ฐ์?) ํ์ ๋ ์ด์ ์ด์ ๋ฒ์ ์ ์ง์ํ์ง ์์ ๊ณํ์ ๋๋ค. ์๋ก์ด ๊ธฐ๋ฅ/์์ ์ฌํญ์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ๋ฒ์ ์ ์ฌ์ฉํ๋ ์ฌ์ฉ์์๊ฒ ์ ๊ณต๋ ๋ง์ด๊ทธ๋ ์ด์ ๊ณํ๊ณผ ํจ๊ป ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ํธ๋๊ณผ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํธ๋ ๋ชจ๋์ ๋ณํฉ๋ ์ ์์ต๋๋ค.
์์ ์ธ๊ธํ 12๊ฐ์ ํ์ ์ด์ ๋ฒ์ ์ _์ฌ์ ํ_ ์๋ํ์ง๋ง TLC๋ฅผ ๋ฐ์ง ์์ต๋๋ค.
๋ฌผ๋ก ์ด๊ฒ์ ๋ง์ ์ค๋ฒ ํค๋์ด์ง๋ง ์ด์ ๋ฒ์ ๊ณผ์ ํธํ์ฑ์ ์ํด ๋ณ๊ฒฝํ๋ ค๊ณ ์๋ํ๋ ๊ฒ๋ณด๋ค ์ฌ๋ฐ๋ฅด๊ฒ ๋ณ๊ฒฝํ๋ ๊ฒ์ด ๋ ๋ซ๋ค๊ณ ์๊ฐํฉ๋๋ค. ๋ํ ๋ณ๊ฒฝ์ ํจ์ฌ ๋ ๋ณต์กํ๊ฒ ๋ง๋ค์ด ํต์ฌ ๊ฐ๋ฐ ํ์ ๊ด์ฌ์ ๋ ์ ์์ต๋๋ค. ๋ชฐ๋ผ.
์ด ์ ๊ทผ ๋ฐฉ์์ ๋ ๋ค๋ฅธ ์ ์ฌ์ ์ธ ๋จ์ ์ ์ฌ์ฉ์๊ฐ CDN์์ ์ด ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ๊ณ ๋ช ์์ ๋ฒ์ ์ ์ง์ ํ์ง ์๋๋ค๋ ๊ฒ์ ๋๋ค(์ด๋ค ์ด์ ๋ก๋ ). ์ด๋ก ์ธํด ์ด์ ๋ฒ์ ๊ณผ ํธํ๋๋ API๊ฐ ์ถ์๋๋ฉด ์ฌ์ดํธ๊ฐ ์ค๋จ๋ ์ ์์ต๋๋ค. ๋ด๊ฐ ๋งํ ์ ์๋ ๊ฒ์ "๋น์ ์๊ฒ ๊ทธ๋ ๊ฒ ๋งํ์ด์."๋ผ๋ ๋ง๋ฟ์ด์ง๋ง, ์ด๊ฒ์ด ํ์ฌ๋ก์๋ ๋ฐ์๋ค์ผ ์ ์๋ ์ํ์ด ์๋ ์๋ ์๋ค๋ ์ ์ ์ดํดํฉ๋๋ค.
๋์ผํ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ ๊ฐ์ง ๋ฒ์ ์ ๊ฐ๋ ๊ฒ์ ์ ์ญ ๊ฐ์ฒด์ ์์กดํ๊ณ freeze()
๊ณ์ ์ฌ์ฉํ๋ ๊ฒ ์ธ์๋ ์ค์ ๋ก ๊น๋ํ ๋ฐฉ๋ฒ์ด ์๋ ๊ฒฝ์ฐ์๋ง ๋ฌธ์ ๊ฐ ๋ฉ๋๋ค.
TLDR์ ํด๊ฒฐํ๋ ค๋ ๋ฌธ์ ๊ฐ ์ด๋ฏธ ์ฌ์ฉ ์ค์ธ semver์ ์ํด ํด๊ฒฐ๋ ๊ฒ์ฒ๋ผ ๋ค๋ฆฝ๋๋ค. ๊ทธ๋ฅ ์ฌ์ฉํด์ผ ํ๋ ๋๋ก ์ฌ์ฉํ์ง ์๋ ์ด์ ๋ ๋ฌด์์
๋๊น? ์ฃผ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ์ฃผ์ ๋ฒ์ ์
๋๋ค. ์ด๊ฒ์ด ์ค๋จ๋๋ ์ ์ผํ ๊ฒฝ์ฐ๋ ์ ์ญ moment
๋ณ์์ ์์กดํ๊ณ CDN์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ์ด์ง๋ง ์ฌ๊ธฐ์ ๋ณ๊ฒฝํ๋ฉด ์ด์จ๋ ์ค๋จ๋ฉ๋๋ค.
๋ด ํฌํ๋ semver ๋ฐ ๋ถ๋ณ 3.0 ๋ฆด๋ฆฌ์ค์๋ ์์ต๋๋ค.
๋๋ freeze
์ด๋ฆ์ ๋ฐ๋ํ์ง ์์ง๋ง, ์๊ฐ์ด ๊ณ ์ ๋์ด ์๋์ง ์ฌ๋ถ์ ๋ํด ์์ ํ ๊ฐ์ ์ ํ๋ ๊ฒ์ด ์ด๋ ต๋ค๋ ๊ฒ์ด ๋ณธ์ง์ ์ผ๋ก ๋ฌธ์ ๊ฐ ์์์ ๋ฐ๊ฒฌํ์ต๋๋ค. ( Object.freeze()
์ ๋น์ทํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค.)
๋ถ๋ณ์ ์๊ฐ์ ๋๊ฒฐ๋์ง ์์์ผ ํ๋ฉฐ, ๋๊ฒฐ ์ฌ๋ถ์ ๋ํด ์์ฌ์ ์ฌ์ง๊ฐ ์์ด์ผ ํฉ๋๋ค. ์ด๊ฒ์ ๋น๋ ํจํด์ ์๊ฒฉํ ๋ณํ์ ํตํด ์ํ๋ ์ ์์ต๋๋ค(์: .build()
๊ฐ ํธ์ถ๋ ๋๊น์ง _only_ ๊ฐ์ฒด์๋ setter๊ฐ ์๊ณ ๊ทธ ํ์๋ _only_์ getter๊ฐ ์์ต๋๋ค). ๋ชจ๋ setter๊ฐ ๋ณต์ ๋ณธ์ ๋ฐํํ์ฌ ์ธ์คํด์คํ๋ฉ๋๋ค.
์๋ฅผ ๋ค์ด:
/* BUILDER PATTERN */
var bldr = moment.immutable()
.hours(5)
.minutes(30)
.seconds(25);
bldr.hours(); // throws exception. builder has no getters
var time = bldr.build();
time.hours(); // 5
time.hours(6); // throws, OR returns a clone
/* A more explicit variant: */
var bldr = moment.immutable()
.setHours(5);
bldr.getHours; // undefined
var time = bldr.build();
time.getHours(); // 5
time.setHours; // undefined
/* VALUE OBJECT */
var time = moment.immutable() // 00:00:00
.hours(5) // new object => 05:00:00
.minutes(30) // new object => 05:30:00
.seconds(25); // new object => 05:30:25
/* Same thing, but more efficient: */
var time2 = moment.immutable(5,30,25); // 05:30:25
time.hours(); // 5
time.hours(6); // new object => 06:30:25
์ฒซ ๋ฒ์งธ ์๋ ์๋ฐ์ ๋งค์ฐ ์ ์ฌํ์ง๋ง ๋ชจ๋ฉํธ๊ฐ ์ด๋ป๊ฒ ๊ตฌ์ฑ๋๊ณ ๋ชจ๋ฉํธ๋ก ๋ฌด์์ ํ ์ ์๋์ง์ ๋ํ ๋ชจํธํจ์ด ๊ฑฐ์ ์์ต๋๋ค. ๋ํ ์ค๋ฒํค๋๊ฐ ๊ฑฐ์ ์๋ ์๋ก์ด ๋ชจ๋ฉํธ๋ฅผ ๊ตฌ์ฑํ ์ ์๋ ํจ์จ์ ์ด๊ณ ์ง๊ด์ ์ธ ๊ฒฝ๋ก๋ฅผ ์ ๊ณตํ๋ฉฐ ํ์ฌ ๋๋ถ๋ถ์ ์ฌ๋๋ค์ด ๋ชจ๋ฉํธ๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์์ ๋ฐ์ ํ๊ฒ ๋ฐ๋ฆ ๋๋ค.
๋น๋๋ ๋ชจ๋ฉํธ์ ์ค์ ์๊ฐ ์์ธ๋ฅผ throwํ๋๋ก ํ๋ฉด ์ด ๋์์ด ๋ชจํธ์ฑ์ ๋์ฑ ์ค์ด๊ณ (์์ธํ ๋ด์ฉ์ ํฌ์ํ๋ฉด์) ๊ฐ๋ฐ์๊ฐ ์๋ก์ด ๋ชจ๋ฉํธ๋ฅผ ์์ฑํ ๋๋ง๋ค ์ธ์ ํ๋๋ก ๊ฐ์ ํ๊ธฐ ๋๋ฌธ์ ๋๋ค.
๋ ๋ฒ์งธ ์๋ ๋ง์ ๊ฐ์ฒด๋ฅผ ์์ฑ(๋ฐ ํ๊ธฐ)ํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํจ์ฌ ๋ ๋ง์ ์ค๋ฒํค๋๊ฐ ์๋ ๊ฒ์ฒ๋ผ ๋ณด์
๋๋ค. ๊ทธ๋ฌ๋ ์ต์ ํ์ ์ฌ์ง๊ฐ ๋ง์ต๋๋ค. ํ๋ GC๋ ๊ฝค ์ข์ต๋๋ค. ๊ฒ์ผ๋ฅธ ํ๊ฐ๊ฐ ๋์์ด ๋ ์ ์์ต๋๋ค. Moment ๊ฐ์ฒด๋ฅผ ๊ฐ๋ฅํ ํ ๊ฐ๋ณ๊ฒ ๋ง๋ค ์ ์์ต๋๋ค(๊ธฐ๋ณธ Date
). (๋น๊ต๋ฅผ ์ํด ์ด ํจํด์ JavaScript์์ ๋ฌธ์์ด์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์๊ณผ ๋ค๋ฅด์ง ์์ต๋๋ค)
์ ๋ semver์ ํฌ์ด์ง๋ง ๋ธ๋ผ์ฐ์ ์ฌ์ฉ ์ฌ๋ก๋ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฌธ์ ๋ก ๋ง๋ญ๋๋ค. ์๋ํ๋ฉด ๋ชจ๋ ๋ก๋ ์์ด ๊ฐ์ ํ์ด์ง์ ๋ ๊ฐ์ง ๋ฒ์ ์ moment๊ฐ ์์ ์ ์๊ธฐ ๋๋ฌธ์ ๋๋ค.
์์ ์ธ๊ธํ๋ฏ์ด Moment์ ์์กดํ๋ _๋ง์_ ๋ ๊ฑฐ์ ์ฝ๋๊ฐ ์์ต๋๋ค. ์ต์ํ ์ํํ ์ ํ ๊ธฐ๊ฐ์ ํ์ฉํ๋ ค๋ฉด ๋ ํจํด์ ๋ชจ๋ ์ง์ํ๋ ๋ฆด๋ฆฌ์ค๊ฐ ํ์ํฉ๋๋ค.
์๋ก์ด ์๊ฐ์ ๋ฐํํ๋ ๊ตฌ์ฑ ๊ฐ๋ฅํ ๋ฉ์๋์ ๊ฒฝ์ฐ +1์ ๋๋ค. ๋๋ ๊ทธ๊ฒ๋ค์ด ๋ถ๋ณ์ธ์ง๋ ์๊ดํ์ง ์๋๋ค. ๊ตฌ์ฑ์ ์ ๊ณตํ๋ฉด ๋ฉ์๋๋ฅผ ํจ๊ป ์ฐ๊ฒฐํ๊ฑฐ๋ ํ ์ค(2๊ฐ ๋์ )์ ๋ณํ๋ ์๊ฐ์ ํ ๋นํ ์ ์์ต๋๋ค.
@alexyuly ๋ณต์ ๊ฐ ์๋ํ์ง ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ์ธ๋ผ์ธ์ผ๋ก ์์ฑํ๋ ค๋ฉด ๋ค์๊ณผ ๊ฐ์ด ํ ์ ์์ต๋๋ค.
var a = moment();
var b = a.clone().subtract(1, 'week').startOf('day');
๋๋ ๋ฌด์์ด๋ .
@maggiepint ๊ธ์์, ์ ๋ ์ด๋ฆฌ์์ ๊ฒ ๊ฐ์ต๋๋ค. ๋น์ ์ด ๋ชจ๋ ๋ฐฉ๋ฒ์ ๊ตฌ์ฑํ ์ ์์ ๊ฒ ๊ฐ์ต๋๋ค. ํ ๊ณ ๋ง์. ๋ฌธ์์์ ์กฐ๊ธ ๋ ๋ช ํํ๊ฒ ๋ง๋ค ์ ์์ต๋๊น? ์: http://momentjs.com/docs/#/manipulating/start -of/ <- ๋ฐํ ๊ฐ์ ๋ํ ์ธ๊ธ ์์.
์ฝ๊ฐ์ ์ ๋ฐ์ดํธ - ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ํ์ฌ ์ด ๋ฌธ์ ์ ๋ํ ๋ด ์ ์ฅ์ ๋๋ค: https://maggiepint.com/2016/06/24/why-moment-js-isnt-immutable-yet/
๋๋ ๋๋จธ์ง ํ์ ๋ํด ๋งํ์ง ์์ง๋ง ๊ทธ๋ค์ ๊ทธ๊ฒ์ ๋ณด์๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๋น์ทํ ์์น์ ์๋ค๊ณ ๋งํ ๊ฒ์ ๋๋ค.
@maggiepint ํ๋ฅญํ๊ณ ๋งค์ฐ ์ ํจํ ํฌ์ธํธ
๊ฐ์ฌํฉ๋๋ค. redux์์๋ ๋ถ๋ณ์ฑ์ด ์์ด๋ฏ๋ก js-joda๋ก ํ์คํ ์ ํํ๊ฒ ์ต๋๋ค. ๋๋ ์๋์ ์ธ ์๊ฐ์ ์ํด ์ฌ์ ํ ์๊ฐ์ ์ ์งํ ์ ์์ต๋๋ค.
์๋ฆญ ๋ผ์ฐ - Gmail
2016๋ 6์ 24์ผ ๊ธ์์ผ ์ค์ 11์ 12๋ถ -0700์์ "Maggie Pint" [email protected]์ด ์์ฑํ์ต๋๋ค.
์ฝ๊ฐ์ ์ ๋ฐ์ดํธ - ์ด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ ํ์ฌ ์ด ๋ฌธ์ ์ ๋ํ ๋ด ์ ์ฅ์ ๋๋ค: https://maggiepint.com/2016/06/24/why-moment-js-isnt-immutable-yet/
๋๋ ๋๋จธ์ง ํ์ ๋ํด ๋งํ์ง ์์ง๋ง ๊ทธ๋ค์ ๊ทธ๊ฒ์ ๋ณด์๊ณ ์ผ๋ฐ์ ์ผ๋ก ์ฐ๋ฆฌ ๋ชจ๋๊ฐ ๋น์ทํ ์์น์ ์๋ค๊ณ ๋งํ ๊ฒ์ ๋๋ค.
โ
๋น์ ์ด ์ธ๊ธ๋์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ ๋ฐ๋ ๊ฒ์
๋๋ค.
์ด ์ด๋ฉ์ผ์ ์ง์ ๋ต์ฅํ๊ฑฐ๋ GitHub์์ ๋ณด๊ฑฐ๋ ์ค๋ ๋๋ฅผ ์์๊ฑฐํ์ธ์.
๋์ฐ๋ณ์ด๋ก ์ธํ ์ข ๋ ์ผ๋ฐ์ ์ธ ๋ฒ๊ทธ/ํผ๋: http://stackoverflow.com/questions/26131003/moment-js-start-and-end-of-given-month
+1ํ์ง๋ง ์ค์ ๋ก Redux๋ฅผ ์ฌ์ฉํ๋ฉด Moment ์ธ์คํด์ค๋ฅผ Redux ์ํ ๊ฐ์ฒด์ ์ ํ ๋ฃ์ง ์๊ธฐ ๋๋ฌธ์ ์ด๊ฒ์ด ๋๋ผ์ธ ์ ๋๋ก ์์ ๋ฌธ์ ๋ผ๋ ๊ฒ์ ์์์ต๋๋ค. ๋ ์ง ๋ฌธ์์ด ๋๋ ํ์์คํฌํ๋ง ๋ ๋ ๋ฉ์๋์์ Moment๋ฅผ ์ฌ์ฉํ์ฌ ๋ ์ง ๋ฌธ์์ด์ ๋ค๋ฅธ ๋ฌธ์์ด๋ก ๋ณํํฉ๋๋ค.
๋ด๊ฐ ์ด ์์ ์ ํ๋ ์ด์ ๋ ์ถ๊ฐ ์์ ์์ด ์ํ๋ฅผ ์ง๋ ฌํ ๋ฐ ์ญ์ง๋ ฌํํ๋ ๊ฒ์ด ์ฝ๊ธฐ ๋๋ฌธ์ด์ง๋ง ๋ํ React ๋ฐ Redux์์ ๋์ฐ๋ณ์ด๋ฅผ ๋ฉ์ง๊ฒ ์จ๊ธธ ์ ์์ต๋๋ค.
์ด๋ฒ ์ฃผ๋ง์ ์ด ์ ๋ฐ์ดํธ๋ฅผ ์ ๊ณตํ๊ธฐ ์ํด ์ต์ ์ ๋คํ๊ณ ์์ต๋๋ค. ๊ณํ์ด ์์ง๋ง ์คํํ๊ธฐ ์ ์ ๋ชจ๋ ๊ฒ์ด ์ ๋๋ก ์งํ๋๋์ง ํ์ธํด์ผ ํฉ๋๋ค. ์ ๊ฐ์ค๋ฝ๊ฒ๋ ๋ค์ ์ฃผ์ ๋ฏธ๋์ ํด๋ฆฌ์ค์์ ์์ ํ๋ก ์ด์ฌ๋ฅผ ํ๊ธฐ ๋๋ฌธ์ ์๊ฐ์ด ์กฐ๊ธ ๋๋๊ฒ ์ง๋ง ์์ผ๋ก ๋์๊ฐ๊ณ ์ถ์ต๋๋ค.
๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ์ด ์ฌ์ ํ ํธ๋ํฝ์ ๋ฐ๊ณ ์๋ค๋ ๊ฒ์ ์์๊ธฐ ๋๋ฌธ์ ๋ ํฐ ์ ๋ฐ์ดํธ๋ฅผ ์ค๋นํ๊ธฐ ์ํ ์์ ์ ๋ฐ์ดํธ์ ๋๋ค. ํ์ฌ Babel์ ์ฌ์ฉํ๊ธฐ ์ํด ๋ชจ๋ฉํธ ๋น๋๋ฅผ ์ฌ์์ ์ค์ ๋๋ค. ์ด๊ฒ์ ์ฐ๋ฆฌ๊ฐ @butterflyhug ์ ํ๋ฌ๊ทธ์ธ์ ํต์ฌ ์ ์ฅ์๋ก ๊ฐ์ ธ์ ๊ณต์์ ์ผ๋ก ์ง์ํ๋๋ก ํ๋ ๋จ๊ณ์ ๋๋ค. ๊ทธ ๊ณผ์ ์์ ํ๋ฌ๊ทธ์ธ์ ๋ํ ๋ช ๊ฐ์ง ์ฌํญ์ ์ ๋ฆฌํ ๊ฒ์ ๋๋ค. @butterflyhug ๋ ์ด๊ฒ์ผ๋ก ์ฐ๋ฆฌ๋ฅผ ๋งค์ฐ ์น์ ํ๊ฒ ๋์์ฃผ์์ต๋๋ค. ๋ํ LoDash์ John-David Dalton(์ ํฌ ๋ ๋ค Microsoft์์ ๊ทผ๋ฌด)๊ณผ ๋ง๋ ์ด๋ฏธ LoDash ๊ธฐ๋ฅ์ ์ฌ์ฉํ์ฌ ๊ณต์ ํ๋ฌ๊ทธ์ธ์ ๊ฐ์ ธ์ฌ ๋์ ์ ๋ต์ ๋ํด ๋ ผ์ํ๊ณ ์์ต๋๋ค. ๊ธด ๋ธ๋ก๊ทธ ๊ฒ์๋ฌผ๊ณผ RFC๊ฐ ๊ณง ์ ๊ณต๋ ์์ ์ ๋๋ค.
@maggiepint๋ frozen-moment๋ฅผ ๊ณต์์ ์ผ๋ก ์ง์ํ๋ ๋์ https://github.com/WhoopInc/frozen-moment/issues/20 ์ ๋ค๋ฃฐ ๊ณํ
moment()
๋ํ ๋ชจ๋ ํธ์ถ์ด ๊ธฐ๋ณธ์ ์ผ๋ก ๊ณ ์ ๋ ์๊ฐ์ ๋ฐํํ๊ณ ๊ฐ๋ฐ์๊ฐ ๋งค๋ฒ .freeze()
ํธ์ถํ๋ ๊ฒ์ ๊ธฐ์ตํ ํ์๊ฐ ์๋ ํ ์ด ๋ถ๋ณ์ฑ์ ๋ํ ์ ๊ทผ ๋ฐฉ์์ ์ถฉ๋ถํ๋ค๊ณ ์๊ฐํฉ๋๋ค.
@gabrielmaldi ์ข์ ์ง๋ฌธ์ ๋๋ค. ์ ๋ RFC๋ฅผ ์์ฑ ์ค์ด๋ฉฐ(์ง๊ธ ๋น์ฅ ์์ฑํด์ผ ํจ), ์, ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ ์ฉ ์ฌ์ฉ์ ์ํ ๋ ๋์ ์คํ ๋ฆฌ๋ฅผ ์ ๊ณตํ๋ ๊ฒ์ด ์ ์ ๋ช ๋ฐฑํ ๋ชฉํ์ ๋๋ค. ๋ด ์ ์์ WhoopInc/frozen-moment#20์ ๋ํ ๋ด ์๊ฒฌ์ ๋ฐ๋ผ ์ ์ ๋ฉ์๋๋ฅผ ๊ณ ๋ คํฉ๋๋ค. RFC ๋ฆฌํฌ์งํ ๋ฆฌ์ ๋ํ PR์ ์ด ๋ RFC์ ๋ํ ๋งํฌ๋ฅผ ์ฌ๊ธฐ์ ํด๋น ๋ฌธ์ ์ ๊ฒ์ํ ๊ฒ์ด๋ฉฐ ๊ทธ ๋น์ ์ ์์ ๋ํ ์ปค๋ฎค๋ํฐ ํผ๋๋ฐฑ์ ํ์ํ ๊ฒ์ ๋๋ค.
RFC ์ด์ ์์ฑ์ ๋ง์น๊ณ PR์ ์ด์์ต๋๋ค .
๋ถ๋ถ์ ์ผ๋ก๋ ์ด ๊ธฐ๋ฅ์ ์ฌ์ฉ์์๊ฒ ์ด๋ป๊ฒ ์ ๊ณตํ ๊ฒ์ธ์ง์ ๋ํ ๋ช ๊ฐ์ง ํด๊ฒฐ๋์ง ์์ ์ง๋ฌธ์ด ์๊ธฐ ๋๋ฌธ์ ๋ถ๋ถ์ ์ผ๋ก๋ ์๋นํ ๊ธด ๋ฌธ์์ด๋ฏ๋ก ๋ค์ํ ์ ๊ทผ ๋ฐฉ์์ ์ฅ๋จ์ ์ ๊ฐ์กฐํ๋ ค๊ณ ํฉ๋๋ค. ๊ทธ๋ฌ๋ ๊ตฌํ ์์ด๋์ด๋ ๊ฝค ๊ฒฌ๊ณ ํ๋ค๊ณ ์๊ฐํ๋ฏ๋ก ์ ์๋ ์ฌ์ฉ์ ๋๋ฉด API์ ๋ํด ์์ฝ์ด ์๋ ๊ฒฝ์ฐ ์ฌ๊ธฐ ์ฌ๋๋ค์ ์๊ฒฌ์ ๋ฃ๊ณ ์ถ์ต๋๋ค.
๋ต๋ณํด์ผ ํ ์ฃผ์ ์ง๋ฌธ์ด ํฌํจ๋ RFC ์์ฝ: https://maggiepint.com/2016/07/16/immutability-its-happening/
@maggiepint ํด๋น ๊ธ์ ๋๊ธ์ ์ด์ฉ์ง ์ผ์ผ ๋ฒ๋ ธ๋ค์ . ๋ด๊ฐ ์ด ๋ด์ฉ์ ๋ค์๊ณผ ๊ฐ์ต๋๋ค.
์ด๋ฌํ ๋ณ๊ฒฝ ์ฌํญ์ ๋ํ ๊ฐ์ฅ ํฐ ์ฐ๋ ค๋ ์ปค๋ฎค๋ํฐ์ ๋ถ๊ท ํ์ ์ผ๋ก ๋ชฉ์๋ฆฌ๋ฅผ ๋์ด๊ณ ํํํ๋ ๋ถ๋ถ์ ๋ฐ์ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ด ํ ๋ก ์ด ์งํ๋๊ณ ์๋ค๋ ์ฌ์ค์กฐ์ฐจ ๋ชจ๋ฅด๋ ์ผ๋ฐ ๊ฐ๋ฐ์์ ์กฐ์ฉํ ๋ฐฉ๋ฒฝ์ ํผํ๋ ๊ฒ์ ๋๋ค.
GitHub์ ์ค๋ ๋๋ ๋ ๋์ ๊ฐ๋ฐ ์ปค๋ฎค๋ํฐ์ ์ถ์ํ์ด ์๋๋๋ค. ์ด ์ฌ์ดํธ๋ ์น์์ ๋ง์ ํฌ๋ผ๊ณผ ๋์ผํ ์ฐธ์ฌ ํธํฅ์ ๊ฒช๊ณ ์์ผ๋ฉฐ ํน์ ์ ํ์ ๊ฐ๋ฐ์์๊ฒ ํธํฅ๋์ด ์์ต๋๋ค. ์์ฉ๋ณด๋ค ์์ด๋์ด์ ๊ด์ฌ์ด ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ๊ฐํ ๋๋ ์ฌํ์ ์ผ๋ก ์ธ๊ธฐ ์๋ ํธ๋ ๋๋ฅผ ์ค์ฌ์ผ๋ก ๊ฒฐ์งํ๋ ๊ฒฝํฅ์ด ์๋ค๊ณ ๋งํ ์ ์์ต๋๋ค. ์ด๋ฌํ ๊ฐ๋ฐ์๋ ๋ถ๋ณ์ฑ ๋ฐ ํจ์ํ ํ๋ก๊ทธ๋๋ฐ๊ณผ ๊ฐ์ ์ฒ ํ์ ๋ช ์ ์ ์์ฐ์ค๋ฝ๊ฒ ๋๋ฆฌ๊ณ ๋ค๋ฅธ ์ด๋ค ๊ทธ๋ฃน๋ณด๋ค ๊ทํ์๊ฒ ๋ ๊ฐ๊น์ด ์ ๊ทผํ ์ ์์ต๋๋ค. ๊ทธ๋ค์ ์ด ๋ฐฉ์์ ๊ฐ์ฅ ํฐ ๋ชฉ์๋ฆฌ๋ฅผ ๋ผ ๊ฒ์ด๋ฉฐ ์ด๋ฌํ ๋ณํ๋ฅผ ์ธ์น ๊ฒ์ ๋๋ค. ๊ทธ๋ฌ๋ ๋ ๋์ ์ธ์์ ์ด๋ป์ต๋๊น?
๋ ๋์ ์ธ์์ ํจ๊ณผ๊ฐ ์๋ ๊ฒ์ ์ํฉ๋๋ค. ํ์ฌ ์ฌ์ฉํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ๊ณ์ํด์ ์ ๋ฐ์ดํธ๋ฅผ ๋ฐ์ ๊ฒ์ด๋ผ๋ ์ฌ์ค์ ์๊ณ ์ถ์ด ํฉ๋๋ค. ์ต์ํ ๋ฒ๊ทธ ์์ ์ด์ง๋ง ์ด์์ ์ผ๋ก๋ ์ถ์ ๋ ์ข๊ฒ ๋ง๋๋ ์์ ์ ์ง์ ๊ฐ์ ์ ๋๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ํฌ๋ผ์ ์ ๊ทน์ ์ผ๋ก ์ฐพ์ง ์๊ณ ํธ๋ ๋์ ๋ฐ๋ํ๋ ๋ชฉ์๋ฆฌ๋ฅผ ๋ด๋ ค๋ฉด ๋๊บผ์ด ํผ๋ถ๊ฐ ํ์ํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ ๊ฒ ๋งํ์ง ์์ต๋๋ค.
๋ง์ฝ ๋น์ ์ด ์ด ๋ณํ๋ฅผ ์๋ํ๋ค๋ฉด, ๋๋ ๋น์ ์ด ์ด ๋ณํ๊ฐ ๊ทธ๋ค์ ์ถ์ ๋ ์ข๊ฒ ๋ง๋๋ ์ด์ ๋ฅผ ์ด ์ฌ๋๋ค์๊ฒ ๋งค์ฐ ๋ถ๋ช ํ๊ฒ ์ค๋ช ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ ๊ทธ๋ ์ด๋ํด์ผ ํ๋ ์ด์ ๋ ๊ฑฐ์ ํ๋ก์ ํธ๊ฐ ๊ฐ์ ์ ์ธ ๋ฒ๊ทธ ์์ ์ ๋ฐ์ง ์์ ๊ฒ์ด๋ผ๊ณ ๊ฑฑ์ ํ ํ์๊ฐ ์๋ ์ด์ ๋ ๋ฌด์์ ๋๊น? ๊ทธ๋ฆฌ๊ณ ๋ณธ์ง์ ์ผ๋ก - ํ์ฌ ํ ์ ์์๋ ์ผ์ ์ง๊ธ ํ ์ ์์ต๋๋ค.
๋ํ ์ด ๋ณ๊ฒฝ ์ฌํญ์ ์ค์์ฑ์ ์ค์ ์ฉ์ด๋ก ํ์ธํ๋ ๋ฐ์๋ ๋งค์ฐ ์ฃผ์ํด์ผ ํ๋ค๊ณ ์๊ฐํฉ๋๋ค. ์ด ๋ณ๊ฒฝ ์ฌํญ์ ํ๋ฌ๊ทธ์ธ ๋๋ ๋ํผ๋ก ๋ฆด๋ฆฌ์คํ๊ณ ํธ๋ ํฌ์ ๋ณํฉํ๊ธฐ ์ ์ ๋ช ๊ฐ์ ๋์ ์ฃผ์ ๊น๊ฒ ์ฌ์ฉ์ ๋ชจ๋ํฐ๋งํด์ผ ํ๋์ง ๊ถ๊ธํฉ๋๋ค. ๋ถ๋ณ์ฑ์ด ํ์ ์์ฅ์ ๊ด์ฌ์ฌ๋ก ๊ณผ๋ํ๊ฒ ํํ๋์ด ์๋ค๋ฉด ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ ์ฒด๋ฅผ ๋ณ๊ฒฝํ์ง ์๊ณ ๋ ์ด๋ฌํ ๋ณด์ปฌ ์ฌ์ฉ์๋ฅผ ๋ง์กฑ์ํฌ ์ ์๋ ๋ฐฉ๋ฒ์ ์ฐพ์์ ๊ฒ์ ๋๋ค.
์ฒ์ ์ฌ์ฉ์๋ก์ ๋๋ startOf endOf๋ก ์์ด๋ฒ๋ฆฐ ์๊ฐ ํ์ ์ฌ๊ธฐ์์ ๋๋ฌ์ต๋๋ค. ์ด ๋ฐฉ๋ฒ๋ค์ ๋๋๊ฒ๋ ๋์ฐ๋ณ์ด๋ฅผ ์ผ์ผํค๊ณ ์์ต๋๋ค!
์์ ํ ๋ถ๋ณ์ฑ์ ์ํด +1
์๋ง๋ ๋ ๋ค๋ฅธ ํด๊ฒฐ์ฑ ์ momentjs์ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ ๊ฐ๋ฅํ๋ค๋ ๊ฒ์
๋ ๋ค๋ฅธ ์๋ฃจ์ , ๊ฐ๋ณ์ฑ์ ์ํ๋ค๋ฉด ๊ฐ์ฒด ์งํฅ ๊ฐ๋ ์ ์ฌ์ฉํ๊ณ NEW ํค์๋ ๋ moment() ํฉํ ๋ฆฌ ํจํด์ ์ฌ์ฉํ์ฌ ๊ฐ์ฒด ์์ฑ์ ์์ฑํ์ญ์์ค.
๋ ๋์ ์ธ์์ ํจ๊ณผ๊ฐ ์๋ ๊ฒ์ ์ํฉ๋๋ค.
...์ด ๋ณํ๊ฐ ๊ทธ๋ค์ ์ถ์ ๋ ๋ซ๊ฒ ๋ง๋๋ ์ด์ ๋ฅผ ์ด ์ฌ๋๋ค์๊ฒ ๋งค์ฐ ๋ช ํํ๊ฒ ์ค๋ช ํด์ผ ํฉ๋๋ค.
๋ด๊ฐ ์๊ฐ์ ์ฒ์ ๋ชฉ๊ฒฉํ ์ฌ๋๋ค์ ๋ชจ๋ "์๊ฐ"์ด ๋์ฐ๋ณ์ด๋๋ ํจ์ ์ ๋น ์ง๋ค.
3๋
์ ์ฌ์ฉ ๊ธฐ๊ฐ ํ์๋ ์ฌ์ ํ "์ค ์ ์ฅ, ์ฌ๊ธฐ์์ .startOf๋ฅผ ์ฌ์ฉํ๊ณ ์์ต๋๋ค. ๋ณต์ฌ๋ณธ์ด ํ์ํ ๊ฒฝ์ฐ ๋ ๋ฒ ํ์ธํ๋ ๊ฒ์ด ์ข์ต๋๋ค"๋ผ๊ณ ์ค์ค๋ก์๊ฒ ๋งํด์ผ ํฉ๋๋ค.
ํ์ฌ ๋์์ ์ง๊ด์ ์ด์ง ์์ผ๋ฉฐ ์ด๋ ์ค๋ ์๊ฐ์ด ์ง๋ ์ผ์
๋๋ค.
array.filter/map์ ๋ณ๊ฒฝํ๊ณ ๊ทธ๊ฒ์ด ์ผ๋ง๋ ์ฌ๋ฏธ์๋์ง ํ์ธํ์ญ์์ค.
์ ๊ดํ์ฌ...
์ฑ๋ฅ/๋ฉ๋ชจ๋ฆฌ: ์๊ฐ์ 2๊ฐ ์ด์์ func๋ฅผ ์ฐ๊ฒฐํ ์ ์ด ์์ผ๋ฉฐ ์ผ๋ฐ์ ์ผ๋ก .set().get()
์์ฌ ๋ถ๋ณ์ฑ: java-pass-by-ref-gen์ด ์ข
๋ฃ๋ ๋๊น์ง ๋ง์ ์ธ๋๊ฐ ๊ฑธ๋ฆด ๊ฒ์
๋๋ค.
๋๋ OOP ๋๋ ๋ถ๋ณ์ฑ์ ์ฐพ๊ณ ์๋์ง ์ฌ๋ถ๋ฅผ ์ ํํ๋ ๊ฒ์ ๋ํ @AdamHess ์ ์์ด๋์ด๋ฅผ ์ข์ํฉ๋๋ค.
์ฐ๋ฆฌ๊ฐ ํผ๋์ค๋ฌ์ํ๋ ์ด์ ์ ๋ํ ๋ ๊ฐ์ง ์ผํธ๋ ์ด๊ฒ์ด ๋ฐ๋ก ๋ฐํ๊ฐ์
๋๋ค. moment.add('1', 'days')
๊ฐ JS์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ํจ์๊ฐ ์ผ๋ฐ์ ์ผ๋ก ํ๋ ๊ฒ์ฒ๋ผ ์ ์๋์ง ์์ ๊ฒ์ ๋ฐํํ๋ฉด ํผ๋์ด ์ฌ๋ผ์ง ๊ฒ์
๋๋ค. ์ ์ด๋ ๋์๊ฒ ๋์ผํ ๊ฐ์ฒด๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ ์ ๋ณต์ฌ๋ณธ์ด ์์์ ์๋ฏธํฉ๋๋ค. ๋ฌผ๋ก , ๊ทธ๊ฒ์ ์ฐ๊ฒฐ ๊ฐ๋ฅ์ฑ์ ๊นจ๋จ๋ฆด ๊ฒ์
๋๋ค.
๋ ๋ง์ ๊ฐ๋ฐ์์๊ฒ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ๊ฐ๋ฅ์ฑ์ ๋ฎ๋ค๊ณ ์๊ฐํฉ๋๋ค(ํน๋ณํ ์ฌ์ฉ ์ฌ๋ก ์ ์ธ). ์๊ฐ์ ๊ฐ๋ณ์ฑ์ ์ด๋ฏธ ์ ๋ฅผ ๋ฌผ์์ต๋๋ค. ๋ ์ง๋ ๋ฌธ์์ด์ด๋ ์ซ์์ ๊ฐ์ ๊ฐ์ผ๋ก ์ฒ๋ฆฌ๋์ด์ผ ํฉ๋๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ๋ณ๊ฒฝํ ์ ์๋ ๊ฒฝ์ฐ +1
๊ทธ๋ฐ๋ฐ PHP์๋ ์ด์ ๋์ผํ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. PHP์ฒ๋ผ ๋๊ณ ์ถ์ต๋๊น?! ๐
PHP์์๋ DateTimeImmutable
(์ผ๋ฐ DateTime
์ถ๊ฐ)๋ฅผ ์ ๊ณตํ์ฌ ๋ฌธ์ ๋ฅผ ํด๊ฒฐํฉ๋๋ค.
๊ธฐ๋ณธ ๋์์ ๋ณ๊ฒฝํ ์ ์๋๋ก ๋ณ๊ฒฝํ์ง ์์ผ๋ฉด imoment
/ momenti
(๋๋ ๋ฌด์์ด๋ )๊ณผ ๊ฐ์ ์ผ๊ธ ๋์ฒด API๋ฅผ ๊ณ ๋ คํด์ผ ํฉ๋๋ค. ๋๋ ๋ง ๊ทธ๋๋ก ํญ์ ๊ทธ๊ฒ์ (๋ณ๊ฒฝ ๊ฐ๋ฅํ API๋ฅผ ํตํด) ์ฌ์ฉํ๊ณ ๋ด๊ฐ ์ฌ์ฉํ ๋ค๋ฅธ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๋ฒ์ /API๋ฅผ ์ฌ์ฉํ๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
์ ๋ ๋ถ๋ณ์ฑ์ ํฌํํฉ๋๋ค. ๊ทธ๊ฒ์ด ๊ณํ์ด๋ผ๋ฉด ๊ตฌํ์ ๋์ธ ์ํฅ์ด ์์ต๋๋ค. ๋ง์ ๊ณผ ๋บ์ ์ ํ ๋ ์ด๋ฏธ ๊ฐ๋ณ์ฑ ๋ฌธ์ ์ ๋ถ๋ช์ณค์ต๋๋ค. ๋ ํผ๋์ค๋ฝ๊ฒ ๋ง๋๋ ๊ฒ์ ์ด๋ฌํ ๋ฉ์๋๊ฐ ์ฐ๊ฒฐ๋ก ์ธํด ์ธ์คํด์ค๋ฅผ ๋ฐํํ๋ค๋ ๊ฒ์ ๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ณต์ ๊ธฐ๊ฐ์ ์ด๋ป์ต๋๊น? ๊ทธ๋ ๊ฒํ๋ ๊ฐ์ฅ ์ข์ ๋ฐฉ๋ฒ์ ํดํน๋์ง ์์ ๊ฒ์ ์ฐพ์ ์ ์์์ต๋๋ค.
@ngerritsen ๊ฐ์ฅ ์ข์ ์ต์
์ moment.duration(existingDuration)
์
๋๋ค.
Re: ๊ตฌํ, #3548์ ์ฌ์ ํ โโํ์ฑ PR์ ๋๋ค. ์ฝ๋ ์์ค ์์ ์ด ๋ง์ด ๋จ์ ์์ง ์๊ธฐ๋ฅผ ๋ฐ๋ผ์ง๋ง ํฐ ๋ณ๊ฒฝ ์ฌํญ์ ํ์ธํ๊ธฐ ์ํด ๋ ๋ง์ ๋์ ๊ฐ๋ ๊ฒ์ ๊ฒฐ์ฝ ๋์ ๊ฒ์ด ์์ต๋๋ค. ์ด์ ๊ฐ์ ๋ณ๊ฒฝ ์ฌํญ์ ๋ฆด๋ฆฌ์คํ๋ ๋ฐ ํ์ํ ์ฃผ์ ๋ฒ์ ๋ฒํ๋ฅผ ์ํํ๊ธฐ ์ ์ ๋ฌธ์ ๋ฐ ๊ธฐํ ์์ ๋ ์ํํด์ผ ํฉ๋๋ค. ์ด ๋ชฉ๋ก ์ค ํ๋๋ผ๋ ๋์์ด ๋์ จ๋ค๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค. ๐
.startOf()๊ฐ ์๋ ๋ ์ง๋ฅผ ๋ณ๊ฒฝํ์ฌ ๋ฐ์ํ๋ ๋ฏธ๋ฌํ ๋ฒ๊ทธ๋ฅผ ์๋ณํ๋ ๋ฐ ํ ์๊ฐ์ ๋ณด๋์ต๋๋ค... ๋ ธ๊ณ ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. momentjs๋ JS๋ฅผ ์ํ ํ๋ฅญํ ๋ ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ๋น๋ํ๋ ๋ฐฉ๋ฒ์ ๋ณด์ฌ์ฃผ๋ ํ๋ฅญํ ์์ ์ ์ํํ์ง๋ง ์ ํ ์ค์ ๋๋ค. ์ด๋ฐ ์ข ๋ฅ์ ๋ฒ๊ทธ๊ฐ ๋งค์ฐ ๋ฏธ๋ฌํ๊ธฐ ๋๋ฌธ์ ๊ทธ๋ฆฌ๊ณ (์ฃผ๋ก React, Redux ๋ฐ ELM ๋๋ถ์) ๋ช ๊ฐ์ง ์ผ๋ฐ์ ์ธ FP ๊ฐ๋ ์ ์๊ฐํ ํ ๋ถ๋ณ์ฑ์ ์ผ๋ฐ์ ์ธ ์ด์ ์ ์ดํดํ๊ธฐ ์์ํ์ต๋๋ค.
๊ทธ๋งํ ๊ฐ์น๊ฐ ์๊ธฐ ๋๋ฌธ์ lodash๋ ์ด๋ฏธ lodash/fp๋ฅผ ์ฌ์ฉํ์ฌ ๋ ๋ง์ FP ์ ๊ทผ ๋ฐฉ์์ ๋ฐ๋์ต๋๋ค. lodash/fp๊ฐ ๋ชจ๋ ๊ฒ์ ๋ค์ ์์ฑํ๋ ๋์ ๊ธฐ์กด ๊ธฐ๋ฅ์ ๋ํํ๊ธฐ ๋๋ฌธ์ lodash/fp๊ฐ ๊ตฌํ๋ ๋ฐฉ์์ ์ดํด๋ณด๋ ๊ฒ์ด ์ข์ต๋๋ค. Lodash ์ฌ๋๋ค์ ๋ํ ์ฑ๋ฅ์ ๋ํด ๋งค์ฐ ์ฐ๋ คํ๊ณ ์์ต๋๋ค.
๋๋ ๋ํ @mull์ ๋์ํฉ๋๋ค. ์ง์ง ๋ฌธ์ ๋ ์ด ๊ฒฝ์ฐ ๋ฟ๋ง ์๋๋ผ ๋ ์ผ๋ฐ์ ์ผ๋ก(์: jQuery) IMO์ ๋ช ๊ฐ์ง ํฐ ์ค๊ณ ๊ฒฐํจ์ด ์๋ ์ฐ๊ฒฐ API ๋๋ฌธ์ ๋๋ค. ๋ ์ง๋ฅผ ๋ณ๊ฒฝํ๋ ๋ฉ์๋๊ฐ ์ ์๋์ง ์์ ๊ฐ์ ๋ฐํํ๋ฉด ๋์๊ฒ ๋ ์ข์ ๊ฒ์ ๋๋ค(์ ์ด๋ ์ด๊ฒ์ด ๋ด๊ฐ ์์ฑํ ์ฝ๋์ ์ ์ฉํ๋ ์ผ๋ฐ์ ์ธ ๊ท์น์ ๋๋ค)
moment.frozen ๋ค์์คํ์ด์ค๊ฐ ์์ ์ค์ด์ง๋ง ์ด์ ํฌ์คํฐ์์ ์ ์ํ ๋๋ก date-fns ๋ง ์ฌ์ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค.
๋ณ๊ฒฝ ๊ฐ๋ฅํ ์๊ฐ์ผ๋ก ์ธํด ๋ ๋ค๋ฅธ ๋ฒ๊ทธ๋ฅผ ์์ ํ์ต๋๋ค ๐
์ ์ ์ ์ผ๋ก ๊ด๋ จํ์ฌ 3.0์ด ES6 ํด๋์ค๋ก ์ด๋ํ ์ ์๋ค๋ฉด ๊ต์ฅํ ๊ฒ์ ๋๋ค.
let mom1 = new Moment();
let mom2 = Moment.parse('2019-03-01T14:55');
// etc
๊ทธ๋ฌํ ์์ง์์ ๋ํ ๋ถ๋ณ์ฑ ๋
ผ์๋ฅผ ์ด๋ ์ ์์ต๋๋ค. ๋ชจ๋ ๋ฐฉ๋ฒ์ ํ ๊ฐ์ง ์์ธ๋ฅผ ์ ์ธํ๊ณ ๋ ๋ถ๋ณ์ด์ด์ผ ํ๋ค๊ณ ๋งํ๊ณ ์ถ์ต๋๋ค. .set('minute/hour/year/etc', 18)
๋ผ๋ ๋ฉ์๋.
์ ๋ Moment๋ฅผ ๋ง ์ฌ์ฉํ๊ธฐ ์์ํ๊ณ ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๊ฐ ์ฒ์๋ถํฐ ์์ ํ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ๊ฒ์ ์๋๋ผ๋ ์ฌ์ค์ _๋ฌด์์ ์ต๋๋ค_. ์ด ๋ฌธ์ ๊ฐ ํด๊ฒฐ๋ ๋๊น์ง ์๊ฐ ๋ถ๋ณ์ ์ฌ์ฉํ๊ณ ์์ต๋๋ค.
@alancnet ์๊ฐ์ ์๋ง ์ ๋ ๋ฐ๋์ง ์์ ๊ฒ์ ๋๋ค. ๊ทธ๊ฒ์ ๋๋ฌด ๋ง์ ๋ณํ์ด๋ฉฐ ํ์ฌ ํ๋์ ์์ฉํ๋ ๋ฒ์ ๋ฐฐ์ด ์ฌ์ฉ์๋ก๋ถํฐ ์ถฉ๋ถํ ๋ฐ๋ฐ์ด ์์ต๋๋ค.
๊ทธ๋ค์ ์๋ก์ด ํ๋ก์ ํธ๋ฅผ ํ์ธํ์ญ์์ค: luxon
๊ทธ๊ฒ์ ๋งค์ฐ ํ๋ฅญํ๊ณ ํ๋์ ์ด๋ฉฐ ๋ถ๋ณ(!)์ด๋ฉฐ ๋ชจ๋ ๊ฒ์ .clone()
ํธ์ถ๋ก ๊ฐ์ธ๋ ์๊ฐ ๋ถ๋ณ๋ณด๋ค ํจ์ฌ ๋ ๋์ ์ฑ๋ฅ์ ๋ฐํํด์ผ ํฉ๋๋ค.
momentjs์์ ํ๋์ ์ธ ์ ๊ทผ ๋ฐฉ์์ผ๋ก ์ ํํ๋ ค๋ ์ฌ๋๋ค์ https://github.com/you-dont-need/You-Dont-Need-Momentjs ๋ฅผ ํ์ธ
๋ณ๊ฒฝ์ด ๊ฐ๋ฅํ๋ค๋ ์ฌ์ค์ ๋งค์ฐ ๋๋์ต๋๋ค!
๋ฃฉ์จ ์ ๋์ฒดํ์ด ๋๊ธฐ๊น์ง ์ด๋ ์ ๋์ ๋๊น? ๋ด๊ฐ Moment.js๋ฅผ ์ฌ์ฉํ๋ ์ด์ ์ค ํ๋๋ ์๊ฐ๋ ์ง์์ ๋๋ค. ์ด๊ฒ์ ๋ด ํ๋ก์ ํธ์ ํ์์ ๋๋ค.
@alamothe ๊ทธ ์ง๋ฌธ์ ์น ์ฌ์ดํธ์์ ๋ช ํํ๊ฒ ๋ต๋ณ๋ฉ๋๋ค: https://moment.github.io/luxon/docs/manual/moment.html
๋ซ์ต๋๋ค. ๋ค๋ฅธ ์ฌ๋๋ค์ด ์ง์ ํ๋ฏ์ด ๋๋ถ๋ถ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ API๋ฅผ ์ํ๋ค๋ฉด Luxon์ ์ฌ์ฉํ์ญ์์ค. ๊ฐ์ฌ ํด์.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์ 2์ผํธ๋ ์ฐ๋ฆฌ๊ฐ ์์ ํ ๋ถ๋ณ์ฑ์ ์ถ๊ตฌํ๊ฑฐ๋ ์์ ํ์ง ๋ง์์ผ ํ๋ค๋ ๊ฒ์ ๋๋ค. ์ผ๋ถ ๋ฉ์๋๋ ๋ณ๊ฒฝํ ์ ์๊ณ (
startOf
,add
) ์ผ๋ถ ๋ฉ์๋๋ ๋ณ๊ฒฝ๋์ง ์์ต๋๋ค(year
,get
). ์ด๋ ๊ฒ์ด ์ด๋ ๊ฒ์ ๋๋ค.