๐ง ์ํฉ
๋ฐ๋ชจ๋ฐ์ด ์ดํ๋ก ํธํ API๋ฅผ ๋๋ ค๋ณด๋ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์๋ค. ํ๋ก ํธ ๋ถ๋ค๋ ๋ฑํ ๋ณ๋ง์์ด ์์ผ์ ์ ์ด์ ๊น์ง ๋ฐ๋ก ์ดํด๋ณด์ง ์์๋ค.
๊ทธ๋ฐ๋ฐ ์ต๊ทผ ํ ํฐ ๊ธฐ๋ฐ ์ธ์ฆ์ ๋์ ํ๋ฉด์ ๋ฏธ๋ค์จ์ด ํ ์คํธ๋ฅผ ๋๋ ค๋ณด๋๋ฐ

???
endOfWeek ๊ฐ์ด ์ด์ํ๋ค.
ํ ์ฃผ์ ์์์ด 11์ 27์ผ์ด๋ฉด ๊ทธ ์ฃผ์ ๋ง์ง๋ง์ 12์ 3์ผ์ด์ด์ผ ํ์ง ์๋๊ฐ..!

๊ธํ๊ฒ ๋ฌ๋ ฅ์ ํ์ธํด๋ณด๋ ์ผ์๊ฐ ํ๋ฆฐ ๊ฑด ์๋ ๊ฒ ๊ฐ์๋ค.
๊ทธ ๋ง์ธ ์ฆ, ๋ ์ง๋ฅผ ๊ตฌํ๋ ๊ณผ์ ์์ ๋ฌ์ ๊ทธ๋๋ก ๋๊ณ ์ผ๋ง ๋ฐ๋ ๊ฒ์ผ๋ก ์ถ์ธกํ ์ ์๋ค.
๋ ์ง๋ฅผ ๊ตฌํ๋ ํจ์๋ ๋ค์๊ณผ ๊ฐ๋ค.
function getWeekRange() {
const KST = moment().tz('Asia/Seoul');
const day = KST.day(); // ์์ผ (0: ์ผ์์ผ, 1: ์์์ผ, ..., 6: ํ ์์ผ)
const diff = KST.date() - day + (day === 0 ? -6 : 0);
const startOfWeek = KST.date(diff).format('YYYY-MM-DD'); // ํด๋น ์ฃผ์ ์ฒซ ๋ ์ง
const endOfWeek = KST.date(diff+6).format('YYYY-MM-DD'); // ํด๋น ์ฃผ์ ๋ง์ง๋ง ๋ ์ง
return { start: startOfWeek, end: endOfWeek };
}
moment ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํด ํ๊ตญ์ ํ์ฌ ์๊ฐ์ธ KST๋ฅผ ๊ตฌํ๋ค.
KST์์ ์์ผ์ ๊ตฌํ๊ณ ์ด๋ฅผ KST์์ ๋นผ ์ด๋ฒ ์ฃผ์ ์์์ผ๊ณผ ํ์ฌ ๋ ์ง ์ฌ์ด์ ์ผ์ ์ฐจ์ด๋ฅผ ๊ตฌํด diff์ ์ ์ฅํ๋ค.
๊ทธ๋ฆฌ๊ณ diff๋ฅผ KST.date()์ ๋ฃ๊ณ ํฌ๋งท์ ๋ฐ๊ฟ startOfWeek์ ๊ตฌํ๋ค. endOfWeek์ startOfWeek์ 6์ผ ๋ค๋ก ๊ตฌํ๋ค.
๋ด ๋จธ๋ฆฟ์ ๊ณ์ฐ์ด ๋ง๋ค๋ฉด endOfWeek์ 12์ 3์ผ์ด ๋์ด์ผ ํ๋ค. ๊ทผ๋ฐ ์๋ฑ๋ง๊ฒ 11์ 3์ผ์ด ์ถ๋ ฅ๋์๋ค.
์ฝ๋ค ๋ณด๋ฉด ์ 2023๋ 12์ 3์ผ์ 3์ผ ์ ์ด 2023๋ 11์ 27์ผ์ด ๋๋์ง ๊ถ๊ธํ ํ ๋ฐ ์ด๋ ์ถํ ๋ค๋ฅธ ํฌ์คํ ์์ ๋ค๋ค๋ณด๊ฒ ๋ค.
๐ป ๋ฌธ์
๋ญ๊ฐ ๋ฌธ์ ์ธ์ง ์ฝ์์ ์ฐ๋ค๋ณด๋ ์๋ก์ด ๊ฒ์ ๋ฐ๊ฒฌํ๋ค.


?
๋ ๋ฌ์ด ํ๋ ์ค์๋ค..!
์ด๋ก์จ ์ถ์ธกํ ์ ์๋ ๊ฑด KST.date(diff)๊ฐ ์คํ๋ ๋๋ง๋ค ๊ฐ์ด ๋ฐ๋๋ค๋ ๊ฒ์ด๋ค.
๊ทธ๋ฆฌ๊ณ ์ถ์ธก์ปจ๋ฐ KST.date()์ ์ธ์๋ฅผ ๋ฃ๋ ํ์๊ฐ KST์ ์ํฅ์ ์ฃผ๋ ๊ฒ ๊ฐ๋ค.
๐ ํด๊ฒฐ
๋ฌธ์ ๋ moment ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ date() ๋ฉ์๋์ ๋์์ ์์๋ค.
date์ ๊ฐ์ ๋ฃ์ ๊ฒฝ์ฐ ์์์ผ ๋ 3์ผ ์ , ์์์ผ ๋ 3์ผ ํ ์ด๋ ๊ฒ ๋์ํ๋ ๊ฒ ์๋๋ผ
์ฐ๊ณผ ์์ ๋ ๋๊ณ date๋ฅผ ๋ค์ด์จ ๊ฐ์ผ๋ก ๋ฐ๊พธ๋ ๋ฉ์๋์๋ค.
๊ทธ๋์ diff ๊ฐ์ด ์์๊ฐ ๋ ๋๋ง๋ค ๊ทธ์ ๋ฌ์ ์์ํ์ง ๋ชปํ ๋ค๋ฅธ ๋ ์ง๊ฐ ๋์๋ ๊ฒ์ด๋ค..!
diff๊ฐ ์์๊ฐ ๋๋ ๋ ์ -6์ ์ถ๊ฐ๋ก ๋นผ๋ ์ผ์์ผ,
๊ทธ์ค์์๋ ์์ด์ ์ผ์์ผ์ด์ด์ผ ํ๋ ์กฐ๊ฑด์ด ์๊ธฐ ๋๋ฌธ์ ์ด๋๊น์ง ์๋ฌด๋ ๋ฐ๊ฒฌํ์ง ๋ชปํ๋ค.
์ฌ์ง์ด ์ด๋ฒ์ ํน์ํ๊ฒ 2023๋ 12์ 3์ผ ์ผ์์ผ์ด์ด์ diff+6 ๊ฐ์ธ 3์ด ์ฐ์ฐํ ์ผ์์ ์ผ์นํ์ฌ ๋์ฑ ์์ธ์ ์ฐพ๊ธฐ ํ๋ค์๋ค.
function getWeekRange() {
const KST = moment().tz('Asia/Seoul');
const day = KST.day(); // ์์ผ (0: ์ผ์์ผ, 1: ์์์ผ, ..., 6: ํ ์์ผ)
const diff = KST.date() - day + (day === 0 ? -6 : 0);
const startOfWeek = KST.date(diff); // ํด๋น ์ฃผ์ ์ฒซ ๋ ์ง
const endOfWeek = startOfWeek.clone().add('6', 'days');// ํด๋น ์ฃผ์ ๋ง์ง๋ง ๋ ์ง
return { start: startOfWeek.format('YYYY-MM-DD'), end: endOfWeek.format('YYYY-MM-DD') };
}
clone์ผ๋ก startOfWeek์ ๋ณต์ ํ์ฌ ๋ ์ง๋ฅผ ๋ฐ๊พธ๋๋ผ๋ startOfWeek์ ๋ณํ๊ฐ ์๋๋ก ํ๊ณ
add๋ก startOfWeek์ 6์ผ ๋ค๋ฅผ ๊ตฌํ๋๋ก ์ฝ๋๋ฅผ ๋ฐ๊พธ์๋ค.

๊ทธ ๊ฒฐ๊ณผ ๋ ์ง๊ฐ ์ ๋๋ก ์ ์ถ๋ ฅ๋๋ค!!
ํฉ๋นํ๊ธด ํ๋ฐ ์์ผ๋ก ๋ฉ์๋๋ฅผ ์ ์ฝ์ด๋ณด๊ณ ์จ์ผ๊ฒ ๋ค๋ ๊ตํ์ ์ป์๋ค..
๐ ์ฐธ๊ณ
Moment.js moment().date() Method - GeeksforGeeks
A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.
www.geeksforgeeks.org