๋ฌธ์ ์ ๋ํ ์ค๋ช
๋ฐ ์ฌํ ๋จ๊ณ:
๋ฐฑ์๋์์ ๋ค์ ํ์์ผ๋ก ๋ ์ง๋ฅผ ๋ฐ์๋ค๊ณ ๊ฐ์ ํด ๋ณด๊ฒ ์ต๋๋ค.
"2018-10-10T13:00:00+11:00"
๊ตฌ๋ฌธ ๋ถ์ ๋ฐ ํ์ ์ง์ ํ ํ๋ก ํธ์๋์์ ๋ณผ ๊ฒ์ผ๋ก ์์๋๋ ์ฌํญ:
10-10-2018 1.00 PM
๋ด๊ฐ ์ป์ ๊ฒ:
10-10-2018 5.00 AM
๋๋ ๋ด ์์คํ ์๊ฐ๋๊ฐ ๋ฌด์์ธ์ง ์๊ดํ์ง ์์ต๋๋ค. UTC ์๊ฐ๋ ๋ณด๊ณ ์ถ์ง ์์ต๋๋ค. ์ด๋ป๊ฒ ๋ฌ์ฑํ ์ ์์ต๋๊น?
์ฌ์ฉ๋ ๋ชจ๋ ๋ณ์์ ๊ฐ์ ํฌํจํ์ญ์์ค.
์ ์ฐธ์กฐ.
ํ๊ฒฝ:
๊ทธ๊ฒ์ ์ค์ํ์ง ์์ต๋๋ค, ๊ทธ๊ฒ์ ํ๊ฒฝ์ ์์กดํด์๋ ์๋ฉ๋๋ค. ๊ทธ๊ฒ์ด ๋ฌธ์ ์ ๋๋ค. btw, ๊ทธ๊ฒ์ด ๋ฌ๋ ค ์๊ธฐ ๋๋ฌธ์ ๋๋ค!
Afaik, ์๊ฐ์ ๋ ์ง ํ์์ ์ง์ ํ ๋ ๊ธฐ๋ณธ์ ์ผ๋ก ์ฅ์น์ ์๊ฐ๋๋ฅผ ์ฌ์ฉํฉ๋๋ค(์๋ฐ์คํฌ๋ฆฝํธ์ ํ์ค ๋์์ด๊ธฐ๋ ํจ). ์, ๋ ์ง ํ์์ ํ๊ฒฝ์ ๋ฐ๋ผ ๋ฌ๋ผ์ผ ํฉ๋๋ค. ์๋ฅผ ๋ค์ด, ๋ด ์ฅ์น์์ ๊ทํ์ ๋ ์ง์ ๋ํด ๋ค์์ ์ป์ต๋๋ค. ์ด๋ ํ์ง ์๊ฐ(์คํด๋๋)์ ๋ํ ์ ํํ ์๊ฐ์ ๋๋ค.
moment("2018-10-10T13:00:00+11:00").format()
// => '2018-10-10T15:00:00+13:00'
์ฌ์ฉ์์ ๊ธฐ๋ณธ ์๊ฐ๋๋ฅผ ์๋์ผ๋ก ์ค์ ํ๋ ค๋ฉด IANA ์๊ฐ๋ ์ด๋ฆ๊ณผ ํจ๊ป moment-timezone
๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
moment.tz.setDefault('America/New_York');
๊ทธ๋ฌ๋ฉด ํด๋น ์๊ฐ๋์ ๋ํด ๋ชจ๋ ์์์ด ์ ์ฉ๋๊ณ ํ๊ฒฝ๊ณผ ๋ฌด๊ดํฉ๋๋ค.
๋ค์์ ๋ฌธ์์ ๋ํ ๋งํฌ์ ๋๋ค. https://momentjs.com/timezone/docs/#/using -timezones/default-timezone/
์คํ์
์์ ์ฌ์ฉ์์ ์๊ฐ๋๋ฅผ ์ฐพ๋ ๊ฒ์ ๋ถ๊ฐ๋ฅํ์ง๋ง(์: ์ผ๊ด ์ ์ฝ ์๊ฐ์ ๋ฐ๋ผ ์ฌ๋ฌ ์๊ฐ๋๊ฐ ๋์ผํ ์คํ์
์ ๊ณต์ ํ ์ ์๊ธฐ ๋๋ฌธ์) "์ผ๋ฐ" ์์ญ์ ๋ํด Etc
์์ญ ์ด๋ฆ์ ์ฌ์ฉํ ์ ์์ต๋๋ค(์: Etc/GMT-11
๊ทํ์ ๊ฒฝ์ฐ์๋
๊ทธ๋ฐ ๋ค์ ์๋ฅผ ์ฌ์ฉํ์ฌ ํน์ ์๊ฐ๋์ ๋จ์ผ ๋ ์ง๋ฅผ ์ธ์ํ ์ ์์ต๋๋ค.
moment.tz("2018-10-10T13:00:00+11:00", "America/New_York");
@simonhaenisch ๊ฐ์ฌํฉ๋๋ค.
tz ํ๋ฌ๊ทธ์ธ์ ๋ณด์์ง๋ง ํ๋์์ ๋ค๋ฅธ ๊ฒ์ผ๋ก ๋ณํํ๋ ๊ฒ๊ณผ ๊ฐ์ ์๊ฐ๋๋ฅผ ๊ด๋ฆฌํ๋ ๋ฐ ๋์์ด ๋๋ค๊ณ ์๊ฐํ์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ค ์๊ฐ๋๋ฅผ ์ ํ ๊ฑด๋๋ฆฌ์ง ์๊ธฐ ์ํด ์ฌ์ฉํ๋ ๊ฒ์ด ์ด์ํ๊ฒ ๋ค๋ฆฝ๋๋ค. :)
์ฌ์ฉ์์ ๊ธฐ๋ณธ ์๊ฐ๋๋ฅผ ์๋์ผ๋ก ์ค์ ํ๋ ค๋ ๊ฒฝ์ฐ
์ํ๊น๊ฒ๋ ์๋ฒ์ default
์๊ฐ๋๊ฐ ์์ต๋๋ค. ๊ฐ ์ฌ์ฉ์๋ ํ๋กํ์ ์ ์ฅ๋ ์์ ์ ์๊ฐ๋๋ฅผ ๊ฐ์ง๊ณ ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ํ๋ก ํธ์๋๋ ๊ทธ๊ฒ์ ๋ํด ์๋ฌด๊ฒ๋ ๋ชจ๋ฆ
๋๋ค.
์คํ์ ์์ ์ฌ์ฉ์์ ์๊ฐ๋๋ฅผ ์ฐพ์ ์ ์์ต๋๋ค.
๊ด์ฐฎ์์, ์ ๋ ์๊ฐ๋์ ์ ๊ฒฝ ์ฐ์ง ์์ต๋๋ค. ๋ด๊ฐ ํ์ํ ๊ฒ์ ๋ณ๊ฒฝ ์์ด ์ค๋ ๋ ์ง๋ฅผ ์ ์งํ๋ ๊ฒ๋ฟ์ ๋๋ค.
์ฌ์ฉ์์ ์๊ฐ๋๋ฅผ ์ค์ ์ผ๋ก ์ ์ฅํ๊ณ ์๋ฒ์ ์ ์งํ๊ฑฐ๋ ํ์์คํฌํ์ ํจ๊ป ์ ์ฅํฉ๋๋ค.
์ด๊ฒ์ด ์ ํํ ์ผ์ด๋๊ณ ์๋ ์ผ์ ๋๋ค. ์๊ฐ๋๋ ์ค์ ๊ณผ ํจ๊ป ํ์์คํฌํ๋ก ์ ์ฅ๋ ๋ ์ง์ ๋๋ค.
๋ฐฑ์๋ API๊ฐ ๋ด ์ ์ด ํ์ ์์ผ๋ฏ๋ก ์๊ฐ๋ ์คํ์ ์์ด ์ถ์๋ ๋ฒ์ ์ ๋ ์ง๋ฅผ ๋ณด๋ผ ์ ์์ต๋๋ค. ๋์์ด ๋๊ธฐ๋ฅผ ๋ฐ๋๋๋ค.
ํ์ง๋ง moment.js์ ๋ค์๊ณผ ๊ฐ์ ํญ๋ชฉ์ด ์๋ ์ด์ ๋ ์ ๋ง ํฅ๋ฏธ๋ก์ ์ต๋๋ค.
moment(somDateTime).format({ formatWithDeviceTimezone: true })
๋๋ ์ผ์ข ์ :)
์ฌ๊ธฐ์ formatWithDeviceTimezone
๋ ๊ธฐ๋ณธ์ ์ผ๋ก false์
๋๋ค.
์ด์จ๋ ๊ฐ์ฌํฉ๋๋ค. ์ด์ ๋ฌธ์ ๊ฐ ๋ณด์ ๋๋ค.
parseZone
๋ฅผ ์๋ํ ์ ์์ต๋๋ค.
์๋ฅผ ๋ค์ด BST(UTC + 1)์ ๋ก์ผ์ผ ์๊ฐ๋
moment.parseZone("2018-10-10T13:00:00+11:00").format(); // "2018-10-10T13:00:00+11:00"
moment.parseZone("2018-10-10T13:00:00+11:00").local().format(); // "2018-10-10T03:00:00+01:00"
moment.parseZone("2018-10-10T13:00:00+11:00").utc().format(); // "2018-10-10T02:00:00Z"
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
parseZone
๋ฅผ ์๋ํ ์ ์์ต๋๋ค.์๋ฅผ ๋ค์ด BST(UTC + 1)์ ๋ก์ผ์ผ ์๊ฐ๋