Moment: μš”μΌ λ‘œμΌ€μΌ 문제

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

λ¬Έμ œμ— λŒ€ν•œ μ„€λͺ… 및 μž¬ν˜„ 단계 :
곡식 λ¬Έμ„œμ—μ„œμ™€ 같이
moment.locale('zh_CN');
moment.weekdays(true); // lists weekdays Monday-Sunday in Chinese
true이면 평일이 λ‘œμΌ€μΌ 별 μˆœμ„œλ‘œ λ°˜ν™˜λ©λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜μ΄ 경우 λ‘œμΌ€μΌμ΄ μ „μ—­ 적으둜 λ³€κ²½λ©λ‹ˆλ‹€.

λ”°λΌμ„œ λ‘œμΌ€μΌμ„ 둜컬둜 λ³€κ²½ν•˜λ €λ©΄
moment.localeData('zh_CN').weekdaysShort()
항상 μΌμš”μΌ-ν† μš”μΌμ˜ 평일을 μ€‘κ΅­μ–΄λ‘œ λ‚˜μ—΄ν•©λ‹ˆλ‹€ (λ‘œμΌ€μΌ νŠΉμ • μˆœμ„œκ°€ μ•„λ‹˜). 그리고이 경우 ν•¨μˆ˜μ— 'true'값을 제곡 ν•  수 μ—†μŠ΅λ‹ˆλ‹€ (였λ₯˜ λ°œμƒ).

μ‚¬μš© 된 λͺ¨λ“  λ³€μˆ˜μ˜ 값을 ν¬ν•¨ν•˜μ‹­μ‹œμ˜€.

ν™˜κ²½:

예 : OSX의 Chrome 49, Windows의 Internet Explorer 10, Ubuntu 16.0.4의 Node.JS 4.4.4

특히 IOT μ‘μš© ν”„λ‘œκ·Έλž¨κ³Ό 같은 비정상적인 ν™˜κ²½μ΄μžˆλŠ” 경우 λΈŒλΌμš°μ €μ™€ OSκ°€ λͺ¨λ‘ μ€‘μš”ν•©λ‹ˆλ‹€.

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

  • μ½”λ“œκ°€ μ‹€ν–‰λ˜λŠ” κΈ°κ³„μ˜ μ‹œκ°„λŒ€ μ„€μ •
  • μ½”λ“œκ°€ μ‹€ν–‰ 된 μ‹œκ°„ 및 λ‚ μ§œ
  • μ‚¬μš©μ€‘μΈ 기타 라이브러리 (TypeScript, Immutable.js λ“±)

문제λ₯Όλ³΄κ³ ν•˜λŠ” 경우 μ‚¬μš©μ€‘μΈ ν™˜κ²½μ—μ„œ λ‹€μŒ μ½”λ“œλ₯Ό μ‹€ν–‰ν•˜κ³  좜λ ₯을 ν¬ν•¨ν•˜μ‹­μ‹œμ˜€.

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

λ¬Έμ œκ°€ μˆœκ°„μ— κ²©λ¦¬λ˜μ—ˆλŠ”μ§€ ν™•μΈν•˜μ‹­μ‹œμ˜€.

Bug Language

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

ν₯미둜운 μ •λ³΄λŠ” weekday ν•¨μˆ˜κ°€ λ‘œμΌ€μΌμ„ μΈμ‹ν•˜λ―€λ‘œ

const weekdays = [0, 1, 2, 3, 4, 5, 6].map(dow => moment().locale('en-gb').weekday(dow).format('dddd'))

λ°˜ν™˜ ['Sunday', 'Monday', ...] μœ„ν•΄ en-us .
ν•˜μ§€λ§Œ ['Monday', 'Tuesday', ...] 경우 en-gb μž…λ‹ˆλ‹€.

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

흠, μž¬ν˜„ ν•  수 μ—†μŠ΅λ‹ˆλ‹€. λ‚˜λŠ” 당신이 이것을 λ§ν•˜λŠ” 것 κ°™μ•„μš” :

moment.locale('en') //=> "en" (I don't have the locale set to zh)

// you're saying this is NOT in the right order
moment.localeData('zh_CN').weekdays(); //=> ["星期ζ—₯", "ζ˜ŸζœŸδΈ€", "星期二", "ζ˜ŸζœŸδΈ‰", "ζ˜ŸζœŸε››", "ζ˜ŸζœŸδΊ”", "ζ˜ŸζœŸε…­"]

//but if you change the global locale, then it is
moment.locale('zh_CN'); //=> "zh-cn"
moment.weekdays() //=> ["星期ζ—₯", "ζ˜ŸζœŸδΈ€", "星期二", "ζ˜ŸζœŸδΈ‰", "ζ˜ŸζœŸε››", "ζ˜ŸζœŸδΊ”", "ζ˜ŸζœŸε…­"]

당신이 λ§ν•œ κ²ƒμ²˜λŸΌ μž‘λ™ν•œλ‹€λ©΄ 놀라지 μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€ (localeDataλŠ” λ°μ΄ν„°μ—μ„œ 직접 κ°€μ Έ 였기 λ•Œλ¬Έμ— μž¬μ •λ ¬μ„ μˆ˜ν–‰ν•˜μ§€ μ•Šμ•˜κ±°λ‚˜ μ•„λ§ˆλ„ μš°λ¦¬λŠ” APIκ°€ 없을 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. μ „μ—­μœΌλ‘œ μ„€μ •λ˜μ§€ μ•Šμ€ λ‘œμΌ€μΌμ— λŒ€ν•΄ μ£Όλ¬Έ 된 평일 κ°€μ Έ 였기). ν•˜μ§€λ§Œ ... μœ„μ˜ 배열은 λ™μΌν•˜μ§€ μ•ŠμŠ΅λ‹ˆκΉŒ? λ‚˜λŠ” 쀑ꡭ어λ₯Ό μ½κ±°λ‚˜ λ§ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— 그듀이 ν˜„μ§€ μˆœμ„œλ‘œλ˜μ–΄ μžˆλŠ”μ§€λŠ” λͺ¨λ₯΄κ² μ§€λ§Œ, λ­”κ°€ λΉ λœ¨λ¦¬μ§€ μ•ŠλŠ” ν•œ (μ΅μˆ™ν•˜μ§€ μ•Šμ€ 문자λ₯Ό λ³Ό λ•Œ 항상 κ°€λŠ₯) λ‘˜ λ‹€ λ§žκ±°λ‚˜ 그렇지 μ•ŠμŠ΅λ‹ˆλ‹€. ?

"en-gb"및 "en-us"와 λ™μΌν•©λ‹ˆλ‹€.

λ‚΄ λ‘œμΌ€μΌμ΄ 'en-us'이고 정렬을 ν¬ν•¨ν•˜μ—¬ 평일에 'en-gb'λ₯Ό κ°€μ Έ 였렀면 μ „μ—­ 적으둜 λ‘œμΌ€μΌμ„ λ³€κ²½ν•˜κ±°λ‚˜ μ •λ ¬ 된 평일을 κ°€μ Έ 였기 μœ„ν•΄ λ°°μ—΄ μž‘μ—…μ„ μˆ˜ν–‰ν•΄μ•Όν•©λ‹ˆλ‹€.

moment.locale('en-us')
moment.weekdays(true) // ["Sunday", "Monday", ...

moment.locale('en-gb')
moment.weekdays(true) // ["Monday", "Tuesday", ...

κ·ΈλŸ¬λ‚˜

moment.localeData('en-us').weekdays() // ["Sunday", "Monday", ...

moment.localeData('en-gb').weekdays() // ["Sunday", "Monday", ...

그리고 μ—†μŠ΅λ‹ˆλ‹€

moment.localeData('en-gb').weekdays(true)

흠, 그래, λ‚˜λŠ” 이것을 버그라고 λΆ€λ₯Έλ‹€.

ν₯미둜운 μ •λ³΄λŠ” weekday ν•¨μˆ˜κ°€ λ‘œμΌ€μΌμ„ μΈμ‹ν•˜λ―€λ‘œ

const weekdays = [0, 1, 2, 3, 4, 5, 6].map(dow => moment().locale('en-gb').weekday(dow).format('dddd'))

λ°˜ν™˜ ['Sunday', 'Monday', ...] μœ„ν•΄ en-us .
ν•˜μ§€λ§Œ ['Monday', 'Tuesday', ...] 경우 en-gb μž…λ‹ˆλ‹€.

λ‚˜λŠ” μ•½κ°„μ˜ 파기λ₯Όν–ˆλ‹€.

<Moment>.weekdays λŒ€ <Locale>.weekdays (그리고 μœ μ‚¬ν•˜κ²Œ weekdaysMin, weekdaysShort, months, monthsShort)λ₯Ό κ΅¬ν˜„ν•˜λŠ” λ‹€λ₯Έ ν•¨μˆ˜κ°€ μžˆμŠ΅λ‹ˆλ‹€.

λ¬Έμ„œμ—μ„œ μ–ΈκΈ‰ν–ˆλ“―μ΄ 첫 λ²ˆμ§ΈλŠ” ν˜„μž¬ λ‘œμΌ€μΌμ˜ μ›” λ˜λŠ” 평일을 λ‚˜μ—΄ν•˜λ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
https://momentjs.com/docs/#/i18n/listing -months-weekdays /

두 λ²ˆμ§ΈλŠ” λ‘œμΌ€μΌ μžμ²΄μ—μ„œ 정보λ₯Ό κ°€μ Έ μ˜€λ„λ‘ μ„€κ³„λ˜μ—ˆμŠ΅λ‹ˆλ‹€.
https://momentjs.com/docs/#/i18n/locale -data /

λ™μΌν•œ 맀개 λ³€μˆ˜λ‘œ 평일을 λ‘œμΌ€μΌ μ •λ ¬ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

  • λ”°λΌμ„œ moment.localeData('en-gb').weekdays(true) λŠ” ['Monday', 'Tuesday', ...] )λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€.
  • 이 호좜이 ν˜„μž¬ λ²„μ „μ˜ Momentμ—μ„œ 였λ₯˜λ₯Ό λ°œμƒμ‹œν‚€κΈ° λ•Œλ¬Έμ— 이것이 합리적이라고 μƒκ°ν•©λ‹ˆλ‹€.

μ €λŠ” PR을 μ˜¬λ ΈμŠ΅λ‹ˆλ‹€. μ—¬λŸ¬λΆ„ λͺ¨λ‘κ°€ μ–΄λ–»κ²Œ μƒκ°ν•˜λŠ”μ§€ μ•Œλ €μ£Όμ„Έμš”.

μΌμš”μΌμ΄ μ•„λ‹Œ μ›”μš”μΌμ„ λ°˜ν™˜ν•˜λ„λ‘ moment().locale('en-us').weekday(0) λ₯Ό μˆ˜μ •ν•  κ³„νšμ΄ μžˆμŠ΅λ‹ˆκΉŒ?

@inbalg μ•„λ‹ˆμš”, λ§žμŠ΅λ‹ˆλ‹€.

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