Moment: ๋ฐฑ์—”๋“œ ์‹œ๊ฐ„๋Œ€๋ฅผ ์œ ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์— ๋งŒ๋“  2018๋…„ 10์›” 04์ผ  ยท  3์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: moment/moment

๋ฌธ์ œ์— ๋Œ€ํ•œ ์„ค๋ช… ๋ฐ ์žฌํ˜„ ๋‹จ๊ณ„:
๋ฐฑ์—”๋“œ์—์„œ ๋‹ค์Œ ํ˜•์‹์œผ๋กœ ๋‚ ์งœ๋ฅผ ๋ฐ›์•˜๋‹ค๊ณ  ๊ฐ€์ •ํ•ด ๋ณด๊ฒ ์Šต๋‹ˆ๋‹ค.

"2018-10-10T13:00:00+11:00"

๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ํ˜•์‹ ์ง€์ • ํ›„ ํ”„๋ก ํŠธ์—”๋“œ์—์„œ ๋ณผ ๊ฒƒ์œผ๋กœ ์˜ˆ์ƒ๋˜๋Š” ์‚ฌํ•ญ:

10-10-2018 1.00 PM

๋‚ด๊ฐ€ ์–ป์€ ๊ฒƒ:

10-10-2018 5.00 AM

๋‚˜๋Š” ๋‚ด ์‹œ์Šคํ…œ ์‹œ๊ฐ„๋Œ€๊ฐ€ ๋ฌด์—‡์ธ์ง€ ์ƒ๊ด€ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. UTC ์‹œ๊ฐ„๋„ ๋ณด๊ณ  ์‹ถ์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์–ด๋–ป๊ฒŒ ๋‹ฌ์„ฑํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๊นŒ?

์‚ฌ์šฉ๋œ ๋ชจ๋“  ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ํฌํ•จํ•˜์‹ญ์‹œ์˜ค.

์œ„ ์ฐธ์กฐ.

ํ™˜๊ฒฝ:

๊ทธ๊ฒƒ์€ ์ค‘์š”ํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค, ๊ทธ๊ฒƒ์€ ํ™˜๊ฒฝ์— ์˜์กดํ•ด์„œ๋Š” ์•ˆ๋ฉ๋‹ˆ๋‹ค. ๊ทธ๊ฒƒ์ด ๋ฌธ์ œ์ž…๋‹ˆ๋‹ค. btw, ๊ทธ๊ฒƒ์ด ๋‹ฌ๋ ค ์žˆ๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค!

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

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"

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

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"
์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰