[JS] toISOString() ๋ฉ์๋ ์คํ์ ๊ต์ ํ๊ธฐ (UTC ์๊ฐ๋ ๋ณ๊ฒฝ)
Date.toISOString()
๋ฉ์๋๋ Date ๊ฐ์ฒด๋ฅผ ISO 8601 ํ์์ UTC ์๊ฐ์ผ๋ก ๋ณํํ๋ค. ์ฆ, ์ด๋ค ๊ฐ์ด ๋ค์ด์ค๋ ํญ์ UTC+0 ์๊ฐ์ผ๋ก ๋ณํํ ๊ฐ์ ๋ฐํํ๋ค๋ ์๋ฏธ๋ค.
ํ๊ตญ์ UTC ๊ธฐ์ค์๋ณด๋ค 9์๊ฐ(540๋ถ) ๋น ๋ฅด๊ธฐ ๋๋ฌธ์(+9์๊ฐ) toISOString()
๋ฉ์๋๊ฐ ๋ฐํํ๋ ์๊ฐ๊ณผ "ํ๋ฉด์ ์ธ" ์ฐจ์ด๊ฐ ๋ฐ์ํ๋ค. ์๋ฅผ๋ค์ด ํ์ฌ ํ๊ตญ ์๊ฐ์ด 2022๋
7์ 8์ผ 01์ 56๋ถ์ด๋ผ๋ฉด toISOString
๋ฉ์๋๋ ์ด๋ณด๋ค 9์๊ฐ ๋ฆ์ 2022-07-07T16:56...
๋ฅผ ๋ฐํํ๋ค.
// +09:00์ UTC ๊ธฐ์ค์ ๋ณด๋ค 9์๊ฐ ๋น ๋ฅด๋ค๋ ๊ฒ์ ๋ช
์ํ ๊ฒ
const localDate = new Date('2022-07-08T01:56:00+09:00');
// ์ถ๋ ฅ๊ฐ: 2022-07-07T16:56:00.000Z
// Z๋ Zulu ์๊ฐ๋์ ์ฝ์ด๋ก UTC+0๊ณผ ๋์ผ
console.log(localDate.toISOString());
๋ง์ฝ ๋ก์ปฌ ์๊ฐ๋๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ISO 8601 ํฌ๋งท์ ๋ฌธ์์ด์ ์ป๊ณ ์ถ๋ค๋ฉด ๋ณ๋์ ์ ํธ๋ฆฌํฐ ํจ์๋ฅผ ๋ง๋ค์ด์ ์ฌ์ฉํ ์ ์๋ค. ์๋ ํจ์๋ ๋ก์ปฌ ์๊ฐ๋ ์คํ์ ์ ๊ณ์ฐํ์ฌ ํด๋น ์๊ฐ๋๋ฅผ ๊ธฐ์ค์ผ๋ก ํ ISO ๋ฌธ์์ด์ ์์ฑํ๋ค. ๋ฐํํ ๋ฌธ์์ด์ ์คํ์ ์ ๋ณด๋ฅผ ๊ทธ๋๋ก ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์ ํ์์ ๋ฐ๋ผ UTC ๋๋ ๋ค๋ฅธ ์๊ฐ๋๋ก ๋ณํํ ์ ์๋ค.
const toLocaleISOString = (utcDate) => {
// ๋ก์ปฌ ์๊ฐ๋์ UTC ์๊ฐ๋์ ์ฐจ์ด๋ฅผ ๋ถ ๋จ์๋ก ๋ฐํ
// e.g. -540 (utcDate๋ ๋ก์ปฌ ์๊ฐ๋๋ณด๋ค 540๋ถ ๋๋ฆผ)
const offset = utcDate.getTimezoneOffset();
// offset์ด ์์๋ฉด ์๊ฐ๋ ๊ธฐํธ๋ฅผ '-'๋ก, ์์๋ฉด '+'๋ก ์ค์
const offsetSign = offset > 0 ? '-' : '+';
// ์ซ์๋ฅผ ๋ ์๋ฆฌ ๋ฌธ์์ด๋ก ํฌ๋งคํ
ํ๋ ํจ์ e.g. 2 => '02'
const pad = (num) => String(num).padStart(2, '0');
// ์คํ์
์ ์๊ฐ ๋จ์๋ก ๋ณํ e.g. 540 / 60 = 9 => '09'
const offsetHours = pad(Math.floor(Math.abs(offset) / 60));
// ์คํ์
์ ๋จ์ ๋ถ ๊ณ์ฐ e.g. 540 % 60 -> '00'
const offsetMinutes = pad(Math.abs(offset) % 60);
// getTime() ๋ฉ์๋๋ 1970๋
1์ 1์ผ 00:00:00 UTC ์ดํ ๊ฒฝ๊ณผ๋ ์๊ฐ์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๋ฐํ
// ๋ฐ๋ผ์ offset ๊ฐ์๋ 60 * 1000์ ๊ณฑํด์ ๋ฐ๋ฆฌ์ด ๋จ์๋ก ๋ง๋ค์ด์ ๊ณ์ฐ
const localISOString = new Date(utcDate.getTime() - offset * 1000 * 60)
.toISOString() // e.g. '2022-07-08T01:56:00.000Z'
.slice(0, -1); // ISO ๋ฌธ์์ด์์ 'Z' ์ ๊ฑฐ (Z๋ Zulu ์๊ฐ๋์ ์ฝ์๋ก UTC+0๊ณผ ๋์ผ)
return `${localISOString}${offsetSign}${offsetHours}:${offsetMinutes}`;
};
// ๋ก์ปฌ ์๊ฐ๋ ๊ธฐ๋ฐ ISO ๋ฌธ์์ด ์ถ๋ ฅ => '2022-07-08T01:56:00.000+09:00'
toLocaleISOString(new Date('2022-07-07T16:56:00.000Z'));
'๐ช Programming' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[JS] Lodash Import ์ฉ๋ ์ค์ด๊ธฐ ํ (0) | 2024.05.10 |
---|---|
[React] background-image์ svg ์ฌ์ฉํ๊ธฐ (inline SVG) (0) | 2024.05.10 |
[Git] PR / Commit ๋ฉ์์ง ํค์๋๋ก ์ด์ ์ฐ๋ ๋ฐ ์ข ๋ฃํ๊ธฐ (0) | 2024.05.09 |
[JS] ๋ก์ผ์ผ ํตํ๋ก ์ซ์ ํฌ๋งคํ / ์ฒ ๋จ์๋ง๋ค ์ฝค๋ง ์ถ๊ฐํ๊ธฐ (0) | 2024.05.09 |
[HTML/CSS] ์คํฌ๋กค ๊ธฐ๋ฅ์ ์ ์งํ๋ฉด์ ์คํฌ๋กค๋ฐ ์จ๊ธฐ๊ธฐ (0) | 2024.05.09 |
๋๊ธ
์ด ๊ธ ๊ณต์ ํ๊ธฐ
-
๊ตฌ๋
ํ๊ธฐ
๊ตฌ๋ ํ๊ธฐ
-
์นด์นด์คํก
์นด์นด์คํก
-
๋ผ์ธ
๋ผ์ธ
-
ํธ์ํฐ
ํธ์ํฐ
-
Facebook
Facebook
-
์นด์นด์ค์คํ ๋ฆฌ
์นด์นด์ค์คํ ๋ฆฌ
-
๋ฐด๋
๋ฐด๋
-
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
๋ค์ด๋ฒ ๋ธ๋ก๊ทธ
-
Pocket
Pocket
-
Evernote
Evernote
๋ค๋ฅธ ๊ธ
-
[JS] Lodash Import ์ฉ๋ ์ค์ด๊ธฐ ํ
[JS] Lodash Import ์ฉ๋ ์ค์ด๊ธฐ ํ
2024.05.10 -
[React] background-image์ svg ์ฌ์ฉํ๊ธฐ (inline SVG)
[React] background-image์ svg ์ฌ์ฉํ๊ธฐ (inline SVG)
2024.05.10 -
[Git] PR / Commit ๋ฉ์์ง ํค์๋๋ก ์ด์ ์ฐ๋ ๋ฐ ์ข ๋ฃํ๊ธฐ
[Git] PR / Commit ๋ฉ์์ง ํค์๋๋ก ์ด์ ์ฐ๋ ๋ฐ ์ข ๋ฃํ๊ธฐ
2024.05.09 -
[JS] ๋ก์ผ์ผ ํตํ๋ก ์ซ์ ํฌ๋งคํ / ์ฒ ๋จ์๋ง๋ค ์ฝค๋ง ์ถ๊ฐํ๊ธฐ
[JS] ๋ก์ผ์ผ ํตํ๋ก ์ซ์ ํฌ๋งคํ / ์ฒ ๋จ์๋ง๋ค ์ฝค๋ง ์ถ๊ฐํ๊ธฐ
2024.05.09