Moment: "week()" ν•¨μˆ˜μ—μ„œ 잘λͺ»λœ μ£Ό λ²ˆν˜Έκ°€ λ°˜ν™˜λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2018λ…„ 07μ›” 19일  Β·  5μ½”λ©˜νŠΈ  Β·  좜처: moment/moment

λ¬Έμ œμ— λŒ€ν•œ μ„€λͺ… 및 μž¬ν˜„ 단계:
λ‚ μ§œ(예 [2018, 11, 29] )λ₯Ό λ§Œλ“€κ³  week ν•¨μˆ˜λ₯Ό μˆ˜ν–‰ν•˜λ©΄ κ²°κ³ΌλŠ” 52 μ΄μ§€λ§Œ [2018, 11, 30] 및 31 λ˜ν•œ 1 λ°˜ν™˜ν•©λ‹ˆλ‹€. μ˜ˆμƒ κ²°κ³ΌλŠ” 52 μž…λ‹ˆλ‹€.

μ˜ˆμ‹œ

const a = moment([2018, 11, 29]);
console.log('a', a.year(), a.week());
//a 2018 52

const b = moment([2018, 11, 30]);
console.log('b', b.year(), b.week());
//b 2018 1

jsbin 라이브 예제

ν™˜κ²½:
Safari 11.1.2 on OSX

도움이 될 수 μžˆλŠ” 기타 정보:

"Thu Jul 19 2018 16:52:11 GMT+0200 (CEST)"
"7/19/2018, 4:52:11 PM"
-120
"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/11.1.2 Safari/605.1.15"
"2.14.1"

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ£Ό 번호 맀기기가 κΈ°μ‘΄ κ΄€ν–‰κ³Ό μ–΄λ–»κ²Œ λ‹€λ₯Έμ§€ μ˜ˆμƒν•˜κ³  계싀 κ²ƒμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ 1μ›” 1일이 항상 1주라고 μƒκ°ν•˜κ³  12μ›” 31일은 항상 52/53주에 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 그리고 κ³΅μ •ν•˜κΈ° μœ„ν•΄ 일뢀 λ²½ 달λ ₯μ—λŠ” 그런 μ‹μœΌλ‘œ μ£Ό λ²ˆν˜Έκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

μ£Ό 번호λ₯Ό ν‘œμ€€ν™”ν•  λ•Œ μ„ ν˜Έν•˜λŠ” 것은 주에 항상 7일이 ν¬ν•¨λ˜λ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ISO ν‘œμ€€μ˜ 경우: μ£ΌλŠ” μ›”μš”μΌ-μΌμš”μΌμ— μ‹€ν–‰λ˜κ³  1μ£Όμ—λŠ” ν•΄λ‹Ή μ—°λ„μ˜ 첫 번째 λͺ©μš”일이 ν¬ν•¨λ©λ‹ˆλ‹€. μ΄λŠ” 1주차의 μ›”μš”μΌ-μˆ˜μš”μΌμ΄ 전년도에 _ν•  수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. (이것은 2019/2020에 일어날 κ²ƒμž…λ‹ˆλ‹€: 2019λ…„ 12μ›” 29일-31일은 2020λ…„ 1주의 μΌλΆ€λ‘œ κ°„μ£Όλ©λ‹ˆλ‹€)

ISO 방법( isoWeek() / isoWeekYear() )을 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μΌμš”μΌλΆ€ν„° ν† μš”μΌκΉŒμ§€ μ‹€ν–‰λ˜λŠ” λ‘œμΌ€μΌμ˜ μ •μ˜μ— μ˜μ‘΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

2018λ…„ 12μ›” 30일은 μΌμš”μΌμ΄λ©° ν•΄λ‹Ή μ§€μ—­μ—μ„œλŠ” ν•œ 주의 첫 번째 μš”μΌμž…λ‹ˆλ‹€. ν•΄λ‹Ή 주의 2일만 2018년에 ν•΄λ‹Ήν•˜κ³  λ‚˜λ¨Έμ§€λŠ” 2019년에 ν•΄λ‹Ήν•©λ‹ˆλ‹€. ν•΄λ‹Ή μ£Ό(7일 λͺ¨λ‘)λ₯Ό 2018μ£Ό 53 λ˜λŠ” 2019μ£Ό 1둜 λΆ„λ₯˜ν• μ§€ μ—¬λΆ€λ₯Ό κ²°μ •ν•˜λŠ” 데 둜캘의 κ·œμΉ™μ΄ μ‚¬μš©λ©λ‹ˆλ‹€. , 2019λ…„ 1주차라고 ν•©λ‹ˆλ‹€.

λͺ¨λ“  5 λŒ“κΈ€

μš°λ¦¬λŠ” 같은 λ¬Έμ œμ— μ§λ©΄ν•©λ‹ˆλ‹€.
console.log(moment("2018-w15", "YYYY-[w]WW").add(38, "weeks").format("YYYY-[w]WW"))
2018-w01

@numen31337 μ•„λ§ˆλ„ year() λŒ€μ‹ μ— weekYear() λ₯Ό μ‚¬μš©ν•˜κ³  싢을 κ²ƒμž…λ‹ˆλ‹€.

@Blapi WW λŠ” ISO μ£Όμ΄λ―€λ‘œ μ„œμ‹μ„ 지정할 λ•Œ YYYY λŒ€μ‹  GGGG λ₯Ό μ‚¬μš©ν•΄μ•Ό ν•  κ°€λŠ₯성이 ν½λ‹ˆλ‹€( GGGG λŠ” ISO "μ£Ό 연도"μž…λ‹ˆλ‹€. )

λ‚˜λŠ” 이것을 쑰금 λͺ…ν™•νžˆ ν•  κ²ƒμž…λ‹ˆλ‹€. 여기에 λ‚ μ§œ 및 κ΄€λ ¨ 좜λ ₯이 μžˆλŠ” μ½”λ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€.

const a = moment([2018, 11, 29]);
console.log(
            `a year: ${a.year()}`,  //a year: 2018
            `a month: ${a.month()}`, //a month: 11
            `a date: ${a.date()}`, //a date: 29
            `a week: ${a.week()}`, //a week: 52
            `a weekYear: ${a.weekYear()}`, //a weekYear: 2018
);

const b = moment([2018, 11, 30]);
console.log(
            `b year: ${b.year()}`, //b year: 2018
            `b month: ${b.month()}`, //b month: 11
            `b date: ${b.date()}`, //b date: 30
            `b week: ${b.week()}`, //b week: 1 <=== Why 1?
            `b weekYear: ${b.weekYear()}`, //b weekYear: 2019 <=== Why 2019?
);

λ‚˜μ—κ²Œ λ¬Έμ œκ°€ μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€ week 에 λŒ€ν•΄ 2018, 11, 30 λ₯Ό λ°˜ν™˜ 1 λŒ€μ‹  52 . λ‚΄κ°€ 이 라이브러리의 일뢀 κ°œλ…μ„ 잘λͺ» μ΄ν•΄ν•œ 것은 μ•„λ‹κΉŒ? μž₯기적으둜 λ‚΄ μž‘μ—…μ€ 두 λ‚ μ§œ μ‚¬μ΄μ˜ 달λ ₯ μ£Ό 수λ₯Ό κ³„μ‚°ν•˜λŠ” κ²ƒμ΄μ—ˆμœΌλ©° λ‹€μŒ ν•΄κ²° 방법을 μ‚¬μš©ν•˜μ—¬ 이 μž‘μ—…μ„ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.

const fromDateStartWeek = fromDate.startOf('week');
const toDateStartWeek = toDate.startOf('week');
return toDateStartWeek.diff(fromDateStartWeek, 'weeks');

κ·ΈλŸ¬λ‚˜ λ‚˜λŠ” μ—¬μ „νžˆ 이 week κΈ°λŠ₯에 λŒ€ν•΄ κ³ λ―Όν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이것은 λ²„κ·Έμž…λ‹ˆκΉŒ μ•„λ‹ˆλ©΄ μ œκ°€ λ†“μΉœ 것이 μžˆμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” λ„€μ΄ν‹°λΈŒ κ°œλ°œμ—μ„œ μ™”μœΌλ©° μžλ°” μŠ€ν¬λ¦½νŠΈμ— μ•„μ£Ό μ΅μˆ™ν•©λ‹ˆλ‹€. κ°μ‚¬ν•©λ‹ˆλ‹€.

μ£Ό 번호 맀기기가 κΈ°μ‘΄ κ΄€ν–‰κ³Ό μ–΄λ–»κ²Œ λ‹€λ₯Έμ§€ μ˜ˆμƒν•˜κ³  계싀 κ²ƒμž…λ‹ˆλ‹€.

예λ₯Ό λ“€μ–΄ 1μ›” 1일이 항상 1주라고 μƒκ°ν•˜κ³  12μ›” 31일은 항상 52/53주에 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. 그리고 κ³΅μ •ν•˜κΈ° μœ„ν•΄ 일뢀 λ²½ 달λ ₯μ—λŠ” 그런 μ‹μœΌλ‘œ μ£Ό λ²ˆν˜Έκ°€ ν‘œμ‹œλ©λ‹ˆλ‹€.

μ£Ό 번호λ₯Ό ν‘œμ€€ν™”ν•  λ•Œ μ„ ν˜Έν•˜λŠ” 것은 주에 항상 7일이 ν¬ν•¨λ˜λ„λ‘ ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€. ISO ν‘œμ€€μ˜ 경우: μ£ΌλŠ” μ›”μš”μΌ-μΌμš”μΌμ— μ‹€ν–‰λ˜κ³  1μ£Όμ—λŠ” ν•΄λ‹Ή μ—°λ„μ˜ 첫 번째 λͺ©μš”일이 ν¬ν•¨λ©λ‹ˆλ‹€. μ΄λŠ” 1주차의 μ›”μš”μΌ-μˆ˜μš”μΌμ΄ 전년도에 _ν•  수 μžˆμŒμ„ μ˜λ―Έν•©λ‹ˆλ‹€. (이것은 2019/2020에 일어날 κ²ƒμž…λ‹ˆλ‹€: 2019λ…„ 12μ›” 29일-31일은 2020λ…„ 1주의 μΌλΆ€λ‘œ κ°„μ£Όλ©λ‹ˆλ‹€)

ISO 방법( isoWeek() / isoWeekYear() )을 μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ―€λ‘œ μΌμš”μΌλΆ€ν„° ν† μš”μΌκΉŒμ§€ μ‹€ν–‰λ˜λŠ” λ‘œμΌ€μΌμ˜ μ •μ˜μ— μ˜μ‘΄ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

2018λ…„ 12μ›” 30일은 μΌμš”μΌμ΄λ©° ν•΄λ‹Ή μ§€μ—­μ—μ„œλŠ” ν•œ 주의 첫 번째 μš”μΌμž…λ‹ˆλ‹€. ν•΄λ‹Ή 주의 2일만 2018년에 ν•΄λ‹Ήν•˜κ³  λ‚˜λ¨Έμ§€λŠ” 2019년에 ν•΄λ‹Ήν•©λ‹ˆλ‹€. ν•΄λ‹Ή μ£Ό(7일 λͺ¨λ‘)λ₯Ό 2018μ£Ό 53 λ˜λŠ” 2019μ£Ό 1둜 λΆ„λ₯˜ν• μ§€ μ—¬λΆ€λ₯Ό κ²°μ •ν•˜λŠ” 데 둜캘의 κ·œμΉ™μ΄ μ‚¬μš©λ©λ‹ˆλ‹€. , 2019λ…„ 1주차라고 ν•©λ‹ˆλ‹€.

λͺ…ν™•ν•˜κ²Œ ν•΄ μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€. μ €μ—κ²ŒλŠ” 정말 λ†€λΌμš΄ μΌμž…λ‹ˆλ‹€. Apple Calendar dateComponents(_:from:to:) μ—μ„œμ™€ 같은 APIκ°€ 정말 κ·Έλ¦¬μ›Œμš”. 제 κ²½μš°μ—λŠ” Calendar.current.dateComponents([.weekOfYear], from: sinceDay, to: targetDay) νŠΉμ • ꡬ성 μš”μ†Œμ—μ„œ diffλ₯Ό μš”μ²­ν•  수 있고 ν•΄λ‹Ή μ—°λ„μ˜ μ‹€μ œ 주에 diffλ₯Ό 받을 수 μžˆμŠ΅λ‹ˆλ‹€. days / 7 뿐만이 μ•„λ‹™λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰