Moment: μœ νš¨ν•˜μ§€ μ•Šμ€ κΈ°κ°„ 지원

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

ν•„λ“œλ₯Ό κ²€μ‚¬ν•˜λ”λΌλ„ κΈ°κ°„ ꡬ문 뢄석이 μ„±κ³΅ν–ˆλŠ”μ§€ μ—¬λΆ€λ₯Ό 확인할 수 μžˆλŠ” 방법은 ν˜„μž¬ μ—†μŠ΅λ‹ˆλ‹€.

New Feature

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

이에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

moment 2.23.0 λ₯Ό μ‚¬μš©ν•˜λ©΄ 잘λͺ»λœ ISO8601 λ¬Έμžμ—΄μ—μ„œ 지속 μ‹œκ°„μ„ μƒμ„±ν•˜λ €κ³  ν•  λ•Œ isValid() ν•¨μˆ˜λ„ true λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ:

const mom = moment.duration('asdf')
console.log(mom.isValid()) // This returns true, expected would be false 

μ’€ μ§œμ¦λ‚˜λ„€μš”. μ™„μ „νžˆμ˜ λͺ©μ  패배 isValid() 에 κΈ°λŠ₯ Duration κ²½μš°λΌλ„,이 였브젝트 (μ‹œ isValid() λ°˜ν™˜ false μˆœκ°„ 심지어 잘λͺ»λœ 해석 μ•ŠκΈ° λ•Œλ¬Έμ— μž…λ ₯?)

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

λ‚˜λŠ” λ™μ˜ν•œλ‹€. μ‹œμž‘μœΌλ‘œ isValid λ©”μ†Œλ“œκ°€ ν•„μš”ν•©λ‹ˆλ‹€.

μœ νš¨ν•˜μ§€ μ•Šμ€ 기간은 μ˜ˆμ™Έλ₯Ό λ°œμƒμ‹œμΌœμ•Ό ν•˜κ³  μœ νš¨ν•˜μ§€ μ•Šμ€ κΈ°κ°„μ˜ ν˜„μž¬ μ²˜λ¦¬λŠ” κ°œμ„  사항이 μ•„λ‹Œ 버그라고 μƒκ°ν•©λ‹ˆλ‹€. λ‹€μŒκ³Ό 같은 경우λ₯Ό κ³ λ €ν•˜μ‹­μ‹œμ˜€.

`var wrong = moment.duration(3,'mintues');`

κ²°κ³ΌλŠ” μ–΄λ–»κ²Œ λ κΉŒμš”? λ¬Έμ„œλŠ” 잘λͺ»λœ μž…λ ₯μ—μ„œ λ°œμƒν•˜λŠ” 일을 μ •μ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

add() 및 subtract() λŒ€μ‹  duration κ°€ μ‚¬μš©λ˜λ―€λ‘œ 계단식 νš¨κ³Όκ°€ μžˆμœΌλ―€λ‘œ μ •μ˜λ˜μ§€ μ•Šμ€ λ™μž‘λ„ μžˆμŠ΅λ‹ˆλ‹€.

var hmm = moment().subtract(3,'mintues').toDate();
var uhoh = moment().add(3,'mintues').toDate();

μˆ˜λ™ ν…ŒμŠ€νŠΈμ—μ„œ μ–΄λ–€ 일이 λ°œμƒν•˜λŠ”μ§€ 말할 수 μžˆμŠ΅λ‹ˆλ‹€. moment 기간을 0으둜 μ‚¬μš©ν•˜μ—¬ "성곡"ν•©λ‹ˆλ‹€.

moment() κ°€ 잘λͺ»λœ μž…λ ₯에 λŒ€ν•΄ λ‹¨μˆœνžˆ μ˜ˆμ™Έλ₯Ό throwν–ˆλ‹€λ©΄ μ΄λŸ¬ν•œ λ¬Έμ œλŠ” μ¦‰μ‹œ μ‹λ³„λ˜μ—ˆμ„ κ²ƒμž…λ‹ˆλ‹€. 쑰용히 "성곡"ν–ˆκΈ° λ•Œλ¬Έμ— 클래슀 Garbage-In, Garbage-Out 버그가 μ§€μ†λ˜μ—ˆμŠ΅λ‹ˆλ‹€.

μ˜€νƒ€κ°€ μžˆλŠ” κΈ°κ°„μ˜ λ™μž‘μ€ ν˜„μž¬ μ •μ˜λ˜μ§€ μ•Šμ•˜μœΌλ―€λ‘œ 잘λͺ»λœ λ¬Έμžμ—΄μ— λŒ€ν•œ μ˜ˆμ™Έλ₯Ό throwν•˜κΈ° μ‹œμž‘ν•˜λ©΄ 이전 버전과 ν˜Έν™˜λ©λ‹ˆλ‹€.

μ˜€νƒ€κ°€ μžˆμ„ 수 μžˆλŠ” μ‹ λ’°ν•  수 μ—†λŠ” λ¬Έμžμ—΄μ„ μ‚¬μš©ν•˜λŠ” 경우 λ¬Έμžμ—΄μ΄ μœ νš¨ν•œ 기간을 μ„€λͺ…ν•˜λŠ” 데 μ‚¬μš©ν•  수 μžˆλŠ”μ§€ ν…ŒμŠ€νŠΈν•  λ•Œ try/catch λ₯Ό λͺ…μ‹œμ μœΌλ‘œ μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

+1 @markstos.

λ˜μ§€λŠ” strict μ˜΅μ…˜(λ‚ μ§œμ— λŒ€ν•œ μˆœκ°„ μžμ²΄μ™€ 같은)을 μ§€μ›ν•˜λŠ” 것은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ? ꡬ문 뢄석이 μ‹€νŒ¨ν•  λ•Œ 기간을 0으둜 λ°˜ν™˜ν•˜λŠ” 것은 맀우 μœ„ν—˜ν•©λ‹ˆλ‹€.

strict μ˜΅μ…˜μ€ λ³€κ²½ν•˜μ§€ μ•ŠλŠ” 것보닀 낫지 만 μœ νš¨ν•˜μ§€ μ•Šμ€ λ‚ μ§œλ₯Ό 0 κΈ°κ°„μœΌλ‘œ ꡬ문 λΆ„μ„ν•˜λŠ” 것이 μ²˜μŒμ—λŠ” 쒋은 κΈ°λ³Έ λ™μž‘μ΄λΌκ³  μƒκ°ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

λ™μ˜. κ°€λŠ₯ν•œ 변경은 [email protected]으둜 만 κ°€λŠ₯

λ‚˜λ¨Έμ§€ μˆœκ°„κ³Ό λ™μΌν•œ νŒ¨ν„΄μ„ μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ? _isValid ν•„λ“œμ™€ isValid() λ©”μ„œλ“œκ°€ 있고 ꡬ문 뢄석이 μ‹€νŒ¨ν•˜λ©΄ 기간을 μœ νš¨ν•˜μ§€ μ•Šμ€ κ²ƒμœΌλ‘œ μ„€μ •ν•©λ‹ˆλ‹€.

참고둜 isValid()κ°€ μ‚¬μš©λ˜λŠ” λ‹€λ₯Έ λ¬Έμ„œν™”λœ μœ„μΉ˜λŠ” λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

https://github.com/moment/momentjs.com/search?utf8=%E2%9C%93&q=isValid

μ½”λ“œ 언급도 관련이 μžˆμ§€λ§Œ μ½”λ“œκ°€ μ•„λ‹Œ λ¬Έμ„œμ— λ§ν¬ν•˜λŠ” 것은 μ˜λ„μ μ΄μ—ˆμŠ΅λ‹ˆλ‹€.

+1
νŒŒμ‹±μ˜ 성곡 μ—¬λΆ€λ₯Ό μ•Œ 수 μžˆλŠ” λŠ₯λ ₯이 맀우 ν•„μš”ν•©λ‹ˆλ‹€.
이전 λ²„μ „κ³Όμ˜ ν˜Έν™˜μ„±μ΄ μš°λ €λ˜λŠ” 경우 μž…λ ₯이 μ˜¬λ°”λ₯΄μ§€ μ•Šκ³  strict μΈμˆ˜κ°€ μ§€μ •λœ 경우 throwλ˜λŠ” Duration.parse(input: string, strict?: boolean = true): Duration λ©”μ„œλ“œλ₯Ό λ„μž…ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μž„μ˜μ˜ 데이터에 λŒ€ν•΄ λͺ¨λ‘ 0인 Duration을 얻을 λ•Œμ˜ ν˜„μž¬ λ™μž‘μ€ 맀우 μ΄μƒν•©λ‹ˆλ‹€.

+1
기간에 isValid() λ©”μ„œλ“œκ°€ 있으면(νŒŒμ‹±μ΄ μ„±κ³΅ν–ˆλŠ”μ§€ ν™•μΈν•˜κΈ° μœ„ν•΄) νŽΈλ¦¬ν•©λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, Moment 2.18.0 μ—λŠ” 이제 지속 μ‹œκ°„μ— λŒ€ν•œ .isValid λ©”μ„œλ“œκ°€ μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ κ½€ κ΄€λŒ€ν•©λ‹ˆλ‹€. @markstos @theazureshadow 및 기타 μ‚¬μš©μž, μ‚¬μš©ν•΄ 보고 μ œμ•ˆ 사항이 있으면 μ•Œλ €μ£Όμ‹­μ‹œμ˜€.

@마λ₯΄μ™€ν•˜ν•˜ ,

초기 ν…ŒμŠ€νŠΈλ‘œ μœ„μ˜ 예제 쀑 ν•˜λ‚˜λ₯Ό 볡사/λΆ™μ—¬λ„£κΈ°ν–ˆμŠ΅λ‹ˆλ‹€. μ˜ˆμƒλŒ€λ‘œ true λ˜λŠ” falseλ₯Ό λ°˜ν™˜ν•˜λŠ” λŒ€μ‹  μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€(λͺ¨λ©˜νŠΈ 2.18.0 포함).

 moment.duration(3,'mintues').isValid();

(μ˜ˆμ™Έλ₯Ό λ˜μ§€μ§€ μ•Šκ³  μœ νš¨ν•˜μ§€ μ•Šμ€ 기간을 μƒμ„±ν–ˆμ§€λ§Œ μ—¬μ „νžˆ "성곡"ν•˜μ§€λ§Œ μœ νš¨ν•œμ§€ ν™•μΈν•˜λ©΄ μ˜ˆμ™Έκ°€ λ°œμƒν•©λ‹ˆλ‹€! )

아직 μƒˆ 방법에 λŒ€ν•œ λ¬Έμ„œκ°€ μ—†λŠ” κ²ƒμœΌλ‘œ λ³΄μ΄μ§€λ§Œ 이것이 μ˜λ„λœ μš©λ„κ°€ 아닐 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€.

@markstos 2.18.0이 μžˆλŠ” Momentjs.com 의 μ½˜μ†”μ—μ„œ 문제 없이 ν•΄λ‹Ή μ½”λ“œλ₯Ό 방금 μ‹€ν–‰ν–ˆμŠ΅λ‹ˆλ‹€. μžμ„Έν•œ λ‚΄μš©μ„ μ•Œμ•„λ³ΌκΉŒμš”?

λΆ„μ˜ μ² μžκ°€ 틀리기 λ•Œλ¬Έμ— ν•΄λ‹Ή μ½”λ“œκ°€ μœ νš¨ν•˜μ§€ μ•Šμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

2017λ…„ 3μ›” 21일 μ˜€ν›„ 2μ‹œ 35뢄에 "Maggie Pint" [email protected]이 λ‹€μŒκ³Ό 같이 μΌμŠ΅λ‹ˆλ‹€.

@markstos https://github.com/markstos 방금 ν•΄λ‹Ή μ½”λ“œλ₯Ό μ‹€ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.
2.18.0이 μžˆλŠ” Momentjs.com의 μ½˜μ†”μ—λŠ” λ¬Έμ œκ°€ μ—†μŠ΅λ‹ˆλ‹€. μš°λ¦¬κ°€ 얻을 수 μžˆμŠ΅λ‹ˆκΉŒ?
그것에 λŒ€ν•œ μžμ„Έν•œ λ‚΄μš©μ€?

β€”
당신이 μ–ΈκΈ‰λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/moment/moment/issues/1805#issuecomment-288176838 λ˜λŠ” μŒμ†Œκ±°
μŠ€λ ˆλ“œ
https://github.com/notifications/unsubscribe-auth/ACbGmWIf24KlRs8oiS2wTn206iJNMod7ks5roBhfgaJpZM4CRuVM
.

기간은 λ¬΄νš¨λ‘œν•΄μ•Όν•˜λŠ” 이유λ₯Ό 예 @marwahaha @maggiepint, "λΆ„"의 λ§žμΆ€λ²•μž…λ‹ˆλ‹€.

@markstos Momentjs.com 의 μ½˜μ†”μ—μ„œλ„ ν•΄λ‹Ή μ˜ˆμ™Έλ₯Ό μž¬ν˜„ν•  수 μ—†μŠ΅λ‹ˆλ‹€. (μ§€κΈˆμ€ 2.18.1μž…λ‹ˆλ‹€.) isValidλ₯Ό ν˜ΈμΆœν•  λ•Œ μ—¬μ „νžˆ μ˜ˆμ™Έλ₯Ό μž¬ν˜„ν•  수 μžˆλ‹€λ©΄ 더 μžμ„Έν•œ 정보λ₯Ό 얻을 수 μžˆμŠ΅λ‹ˆκΉŒ?

screen shot 2017-03-22 at 10 38 06

(λΆ„λͺ…νžˆ MarkλŠ” 이 μƒν™©μ—μ„œ isValid κ°€ false isValid λ₯Ό λ°˜ν™˜ν•˜κΈ°λ₯Ό μ›ν–ˆμ§€λ§Œ μ΄λŠ” μ˜ˆμ™Έμ™€λŠ” λ³„κ°œμ˜ λ¬Έμ œμž…λ‹ˆλ‹€. 객체 μž…λ ₯으둜 ꡬ문 뢄석 μœ νš¨μ„±μ„ μ²˜λ¦¬ν•˜λŠ” 방법이 100% λͺ…ν™•ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.)

2.18.1μ—μ„œλ„ μ˜ˆμ™Έλ₯Ό μž¬ν˜„ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ 그것은 잘λͺ»λœ κ²½λ³΄μ˜€μ„ κ²ƒμž…λ‹ˆλ‹€. "isValid()"에 λŒ€ν•΄ "true"λ₯Ό λ°˜ν™˜ν•˜λŠ” μ΄λŸ¬ν•œ μ’…λ₯˜μ˜ μœ νš¨ν•˜μ§€ μ•Šμ€ 기간을 κ°–λŠ” @butterflyhug 의 κ²°κ³Όλ₯Ό μž¬ν˜„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€ .

이 경우 결과둜 "0λΆ„"을 잘λͺ» μœ νš¨ν•œ 좜λ ₯으둜 λ°˜ν™˜ν•˜λŠ” λŒ€μ‹  ꡬ문 뢄석이 μ‹€νŒ¨ν•˜μ§€ μ•Šμ•„μ•Ό ν•©λ‹ˆκΉŒ?

ν•΄μ•Ό ν•˜λŠ” 것은 λ‹€λ₯Έ μ§ˆλ¬Έμ΄μ§€λ§Œ IIRCκ°€ ν•˜λŠ” 일은 λ‹€μŒκ³Ό 같이 ν•΄μ„ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
λ‹¨μœ„ ν•΄μ‹œ ν…Œμ΄λΈ”μ—μ„œ λ‹¨μœ„λ₯Ό 찾을 수 μ—†κΈ° λ•Œλ¬Έμ— 값을 λ°€λ¦¬μ΄ˆλ‘œ ν‘œμ‹œν•©λ‹ˆλ‹€.

무효라고 ν•΄μ•Ό ν• κΉŒμš”? μ•„λ§ˆ IMO.

2017λ…„ 3μ›” 22일 μ˜€μ „ 8μ‹œ 42뢄에 "Mark Stosberg" [email protected]이 μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

2.18.1μ—μ„œλ„ μ˜ˆμ™Έλ₯Ό μž¬ν˜„ν•  수 μ—†μŠ΅λ‹ˆλ‹€. μ•„λ§ˆλ„ κ±°μ§“μ΄μ—ˆμ„ 것이닀.
경보. @butterflyhug https://github.com/butterflyhug 'sλ₯Ό μž¬ν˜„ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ΄λŸ¬ν•œ μ’…λ₯˜μ˜ μœ νš¨ν•˜μ§€ μ•Šμ€ 기간이 "true"λ₯Ό λ°˜ν™˜ν•˜λŠ” κ²°κ³Ό
"isValid()".

이 경우 "0λΆ„"을 λ°˜ν™˜ν•˜λŠ” λŒ€μ‹  ꡬ문 뢄석이 μ‹€νŒ¨ν•˜λ©΄ μ•ˆ λ©λ‹ˆλ‹€.
결과적으둜 잘λͺ»λœ 좜λ ₯?

β€”
당신이 μ–ΈκΈ‰λ˜μ—ˆκΈ° λ•Œλ¬Έμ— 이것을 λ°›λŠ” κ²ƒμž…λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ³  GitHubμ—μ„œ ν™•μΈν•˜μ„Έμš”.
https://github.com/moment/moment/issues/1805#issuecomment-288440827 λ˜λŠ” μŒμ†Œκ±°
μŠ€λ ˆλ“œ
https://github.com/notifications/unsubscribe-auth/AFxi0nZAz8gwAJM8fVx5rYPyIWjeEfHMks5roUF4gaJpZM4CRuVM
.

여기에 버그가 μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

https://github.com/moment/moment/blob/497f918515ae6ab900f008f19523b1e4ae5e2450/src/lib/duration/create.js#L34

λ¬Έμžμ—΄μ΄ μœ νš¨ν•˜κ³  "κΈ°κ°„" 맡에 ν‘œμ‹œλœλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€. λ¬Έμžμ—΄μ΄ μ„€μ •ν•  수 μžˆλŠ” μœ νš¨ν•œ 값인지 ν™•μΈν•˜κΈ° μœ„ν•΄ 여기에 검사λ₯Ό μΆ”κ°€ν•˜λŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. 그렇지 μ•Šμ€ 경우 _isValid:false

이 λ™μž‘μ€ ν‘œμ€€ isValid 방법과 μΌμΉ˜ν•©λ‹ˆλ‹€.

moment({'mintues': 3}).isValid()
> true

μ΄κ²ƒμ˜ μ†ŒμŠ€λŠ” normalizeObjectUnits https://github.com/moment/moment/blob/497f918515ae6ab900f008f19523b1e4ae5e2450/src/lib/units/aliases.js#L14 -L29μž…λ‹ˆλ‹€. 것).

@maggiepint @ichernev 이 λ™μž‘μ„ λ³€κ²½ν•΄μ•Ό ν•˜λ‚˜μš”? 곧 λΈŒλ ˆμ΄ν‚Ή 릴리즈λ₯Ό ν•  μ˜ˆμ •μž…λ‹ˆλ‹€...

'3 mintues'λ₯Ό '0 minutes'둜 λ³€ν™˜ν•˜κ³  κ²°κ³Όλ₯Ό "valid"둜 μ„ μ–Έν•˜λŠ” 것은 λ²„κ·Έμž…λ‹ˆλ‹€. 이λ₯Ό μˆ˜μ •ν•˜κΈ° μœ„ν•œ λΈŒλ ˆμ΄ν‚Ή 체인지일 수 μžˆμ§€λ§Œ μ—¬μ „νžˆ 버그 μˆ˜μ •μž…λ‹ˆλ‹€.

이 μœ νš¨μ„± 검사 λ™μž‘μ΄ 이상적이지 μ•Šλ‹€λŠ” 데 λ™μ˜ν•˜μ§€λ§Œ 이것이 λ°˜λ“œμ‹œ 버그 λΌλŠ” λ°μ—λŠ” λ™μ˜ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

moment({'minutes': 3, '$cacheKey': 92619502}).isValid() 와 같은 것을 ꡬ문 λΆ„μ„ν•˜λŠ” 경우λ₯Ό κ³ λ €ν•˜μ‹­μ‹œμ˜€. λ‚˜λŠ” κ·Έ ꡬ문 뢄석을 μœ νš¨ν•œ μˆœκ°„μœΌλ‘œ ν‰κ°€ν•˜λŠ” μ‚¬μš©μžκ°€ μžˆμ„ κ²ƒμœΌλ‘œ κ°•λ ₯히 κΈ°λŒ€ν•˜λ©°, 이 μ˜ˆμ œμ™€ κ·€ν•˜κ°€ μž‘μ„±ν•œ 버그 사이에 원칙적인 차이가 μ—†λ‹€κ³  λ΄…λ‹ˆλ‹€.

μš°λ¦¬κ°€ λ…Όμ˜ν•˜κ³  μžˆλŠ” APIλŠ” moment μƒμ„±μžλ₯Ό μœ„ν•œ "객체 νŒŒμ„œ"이며 여기에 λ¬Έμ„œν™”λ˜μ–΄ μžˆμŠ΅λ‹ˆλ‹€.

http://momentjs.com/docs/#/parsing/object/

λ¬Έμ„œλŠ” ν˜„μž¬ μ•Œ 수 μ—†κ±°λ‚˜ μΆ”κ°€ 인수λ₯Ό μ „λ‹¬ν•˜λŠ” μ²˜λ¦¬μ— λŒ€ν•΄ μΉ¨λ¬΅ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ§€κΈˆ μ—¬κΈ°μ—μ„œ Moment의 λ™μž‘μ€ "Garbage In, Garbage out"으둜 μ„€λͺ…ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 가비지 μž…λ ₯은 μžλ™μœΌλ‘œ 수락되고 κ²°κ³ΌλŠ” "가비지 아웃"μž…λ‹ˆλ‹€. μ² μžκ°€ 잘λͺ»λœ λ‚ μ§œλŠ” λ‹€λ₯Έ λ‚ μ§œλ‘œ λ³€ν™˜λ˜κ³  μœ νš¨ν•œ κ²ƒμœΌλ‘œ κ°„μ£Όλ©λ‹ˆλ‹€!

μ΄λŸ¬ν•œ μ—…λ°μ΄νŠΈλ₯Ό 톡해 κ°œλ°œμžλŠ” κ°€λŠ₯ν•œ ν•œ 빨리 μžμ‹ μ΄ μ‹€μˆ˜λ₯Ό ν–ˆμŒμ„ μ•Œ 수 μžˆμŠ΅λ‹ˆλ‹€.

  • μ•Œ 수 μ—†λŠ” μΈμˆ˜μ—μ„œ μ˜ˆμ™Έκ°€ λ°œμƒν•œλ‹€λŠ” λ¬Έμ„œλŠ” 개체 μƒμ„±μžμ— μ „λ‹¬λ©λ‹ˆλ‹€.

    • μ•Œ 수 μ—†λŠ” μΈμˆ˜κ°€ 개체 μƒμ„±μžμ— μ „λ‹¬λ˜λ©΄ μ˜ˆμ™Έλ₯Ό throwν•©λ‹ˆλ‹€.

Momentκ°€ κ³„μ†ν•΄μ„œ "Garbage In"을 μœ νš¨ν•œ κ²ƒμœΌλ‘œ λ°›μ•„λ“€μ΄λŠ” ν•œ κ°œλ°œμžμ—κ²ŒλŠ” κ³„μ†ν•΄μ„œ 손해가 될 것이며 μ‚¬μš©μžλŠ” 깨진 λ‚ μ§œκ°€ "유효"ν•˜λ‹€κ³  Momentκ°€ 잘λͺ» λ³΄κ³ ν•˜κ²Œ λ©λ‹ˆλ‹€.

이 κ°œμ„  사항은 "쀑단" λ³€κ²½ν• λ§Œν•œ κ°€μΉ˜κ°€ μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” 이것에 λ¬Όλ ΈμŠ΅λ‹ˆλ‹€. moment().subtract('1 day') ... 이것은 지속 μ‹œκ°„μ„ ν‘œν˜„ν•˜λŠ” μœ νš¨ν•œ 방법이 μ•„λ‹™λ‹ˆλ‹€. κ·Έλž˜λ„ .subtract(0) 와 같을 κ²ƒμœΌλ‘œ κΈ°λŒ€ν•˜μ§€λŠ” μ•ŠμŠ΅λ‹ˆλ‹€. IMO, 이 경우 κ°€μž₯ λ†€λΌμš΄ 일은 λ˜μ§€λŠ” κ²ƒμž…λ‹ˆλ‹€.

@johnvh μ „μ μœΌλ‘œ λ™μ˜ν•©λ‹ˆλ‹€.

그것이 "기간을 ν‘œν˜„ν•˜λŠ” μœ νš¨ν•œ 방법"이 μ•„λ‹ˆλΌλŠ” 것을 μ•Œκ³  μžˆμ§€λ§Œ μ–΄μ¨Œλ“  κ·Έ μ½”λ“œλ₯Ό μž‘μ„±ν•©λ‹ˆκΉŒ? 당신은 무엇을 κΈ°λŒ€ν•©λ‹ˆκΉŒ? λ‚˜λŠ” 그것이 momentjs μž‘μ„±μžκ°€ μ œκ³΅ν•˜λŠ” ν›Œλ₯­ν•œ λ¬Έμ„œμ—μ„œ 지속 μ‹œκ°„μ„ ν‘œν˜„ν•˜λŠ” μœ νš¨ν•œ 방법이 μ•„λ‹ˆλΌλŠ” 것을 μ•Œμ•„λƒˆλ‹€κ³  κ°€μ •ν•©λ‹ˆλ‹€.

2017λ…„ 4μ›” 25일 08:29에 Mark Stosberg [email protected] 은 λ‹€μŒκ³Ό 같이 μΌμŠ΅λ‹ˆλ‹€.

@johnvh μ „μ μœΌλ‘œ λ™μ˜ν•©λ‹ˆλ‹€.

β€”
이 μŠ€λ ˆλ“œμ— κ°€μž…ν–ˆκΈ° λ•Œλ¬Έμ— 이 λ©”μ‹œμ§€λ₯Ό λ°›κ³  μžˆμŠ΅λ‹ˆλ‹€.
이 이메일에 직접 λ‹΅μž₯ν•˜κ±°λ‚˜ GitHubμ—μ„œ λ³΄κ±°λ‚˜ μŠ€λ ˆλ“œλ₯Ό μŒμ†Œκ±°ν•˜μ„Έμš”.

@simonfox κ°œλ°œμžλŠ” μΈκ°„μž…λ‹ˆλ‹€. μš°λ¦¬λŠ” μ‹€μˆ˜λ₯Ό ν•©λ‹ˆλ‹€. 이것이 우리 μ½”λ“œ 기반의 절반이 ν…ŒμŠ€νŠΈμΈ μ΄μœ μž…λ‹ˆλ‹€. Moment λ¬Έμ„œλŠ” /is/ μš°μˆ˜ν•˜μ§€λ§Œ APIλ₯Ό μ˜¬λ°”λ₯΄κ²Œ κΈ°μ–΅ν•˜κ³  λ¬Έμ„œλ₯Ό μ°Έμ‘°ν•  ν•„μš”κ°€ μ—†λ‹€κ³  μƒκ°ν•˜λ©΄ 도움이 λ˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 잘λͺ»λœ μž…λ ₯을 깨진 "μœ νš¨ν•œ" μž…λ ₯으둜 μžλ™ λ³€ν™˜ν•˜λŠ” λŒ€μ‹  ν›Œλ₯­ν•œ λ¬Έμ„œλΏλ§Œ μ•„λ‹ˆλΌ 잘λͺ»λœ μž…λ ₯에 μ‹€νŒ¨ν•˜λŠ” μ½”λ“œλ„ 있으면 도움이 λ©λ‹ˆλ‹€. @johnvh κ°€ μ½”λ“œκ°€

@markstos μ •ν™•νžˆ. 100% λ™μ˜ν•©λ‹ˆλ‹€.

이것은 좔적해야 ν•˜λŠ” λ²„κ·Έμ˜€μŠ΅λ‹ˆλ‹€. λ¬Όλ‘  λ¬΄νš¨μž„μ„ μ•Œλ©΄μ„œλ„ κ·Έλ ‡κ²Œ μ“°μ§€λŠ” μ•Šμ•˜μŠ΅λ‹ˆλ‹€. μˆœκ°„ μ‘°μž‘ 방법이 μ§€μ›λ˜λŠ” μ„œλͺ…μ—μ„œ 맀우 자유주의적이기 λ•Œλ¬Έμ— μ˜³μ€ κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€. μš°λ¦¬λŠ” λ˜ν•œ μžμ—°μ–΄λ₯Ό 지속 μ‹œκ°„μœΌλ‘œ λ³€ν™˜ν•˜κΈ° μœ„ν•΄ 인간 간격 을 μ‚¬μš©ν•˜λŠ” λ™μΌν•œ ν”„λ‘œμ νŠΈμ—μ„œ 의제 λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. κ·Έλž˜μ„œ μš°λ¦¬λŠ” λ‹€μŒκ³Ό 같은 것을 κ°€μ§ˆ κ²ƒμž…λ‹ˆλ‹€:

moment().subtract('1 day');
agenda.processEvery('1 day');

ν›„μžλŠ” μ˜λ„ν•œ λŒ€λ‘œ μž‘λ™ν•˜μ§€λ§Œ μ „μžλŠ” μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. μ „μžκ°€ μ˜ˆμ™Έλ₯Ό μΌμœΌμΌ°λ‹€λ©΄ 우리의 μ‹€μˆ˜λ₯Ό κ²½κ³ ν–ˆμ„ κ²ƒμž…λ‹ˆλ‹€.

λ˜ν•œ Moment /has/ isValid() λ©”μ†Œλ“œκ°€ 값을 μœ νš¨ν•˜κ±°λ‚˜ 무효둜 κ²€μ¦ν•œλ‹€λŠ” 것을 μ˜λ―Έν•©λ‹ˆλ‹€. μœ νš¨ν•˜μ§€ μ•Šμ€ 값이 μœ νš¨ν•œ κ²ƒμœΌλ‘œ λΆ„λ₯˜λ˜λŠ” 경우 isValid() λ©”μ†Œλ“œκ°€ λ¬Έμ„œν™”λœ λŒ€λ‘œ μž‘λ™ν•˜μ§€ μ•ŠλŠ” κ²ƒμœΌλ‘œ λ³΄μž…λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, μš°λ¦¬λŠ” 이 λΆ„μ•Όμ˜ λͺ¨λ“  PR을 κ²€ν† ν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€!

이 버그 λ˜λŠ” 이와 μœ μ‚¬ν•œ λ¬Έμ œκ°€ λ°œμƒν–ˆμŠ΅λ‹ˆλ‹€. Moment 2.18.1을 μ‚¬μš©ν•˜μ—¬ moment.duration('3', 'minutes').asMinutes() λ₯Ό μ‹€ν–‰ν•˜λ©΄ κ²°κ³Όκ°€ 0이 λ©λ‹ˆλ‹€. 3을 λ°˜ν™˜ν•˜κ±°λ‚˜ μ˜ˆμ™Έλ₯Ό throwν•΄μ•Ό ν•œλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. μ΅œμ†Œν•œ moment.duration('3', 'minutes').isValid() λŠ” false λ°˜ν™˜ν•΄μ•Ό ν•©λ‹ˆλ‹€.

Momentκ°€ μ§€κΈˆ ν–‰λ™ν•˜λŠ” 방식은 μ—¬κΈ° μ—¬λŸ¬ μ‚¬λžŒλ“€μ΄ μ–ΈκΈ‰ν–ˆλ“―μ΄ 감지 및 μ§„λ‹¨ν•˜κΈ° μ–΄λ €μšΈ 수 μžˆλŠ” 버그λ₯Ό μœ λ°œν•˜μ—¬ λ§Žμ€ 문제λ₯Ό μΌμœΌν‚¬ 수 μžˆμŠ΅λ‹ˆλ‹€.

이 λ¬Έμ œκ°€ ν•΄κ²°λ˜μ—ˆμŠ΅λ‹ˆκΉŒ?

@TomJSmith λΉ λ₯Έ ν…ŒμŠ€νŠΈλŠ” 버그가 μ—¬μ „νžˆ μ‘΄μž¬ν•¨μ„ λ³΄μ—¬μ€λ‹ˆλ‹€. 이 μ½”λ“œ:

 moment().subtract('1 day');

"성곡"ν•˜κ³  μ˜ˆμƒλŒ€λ‘œ ν•˜λ£¨ λŒ€μ‹  0일을 λΊλ‹ˆλ‹€. κ²°κ³Ό λ‚ μ§œμ— .isValid() λ₯Ό ν˜ΈμΆœν•˜κ³  κ²°κ³Όκ°€ μœ νš¨ν•˜μ§€ μ•Šμ„ λ•Œ κ²°κ³Όκ°€ μœ νš¨ν•¨μ„ λ‚˜νƒ€λ‚΄λŠ” true 응닡을 λ‹€μ‹œ 받을 수 μžˆμŠ΅λ‹ˆλ‹€.

ν˜„μž¬ λ™μž‘μ€ 일뢀 μ‚¬μš© μ‚¬λ‘€μ—μ„œ λ‚˜μœ κ²°κ³Όλ₯Ό μ΄ˆλž˜ν•  수 있으며 경고와 ν•¨κ»˜ λͺ…ν™•ν•˜κ²Œ λ¬Έμ„œν™”λ˜μ–΄μ•Ό ν•©λ‹ˆλ‹€.

μ‚¬μš© 사둀
보쑴 기간을 κΈ°μ€€μœΌλ‘œ λ¦¬μ†ŒμŠ€λ₯Ό μ‚­μ œν•˜κ³  μ‹ΆμŠ΅λ‹ˆλ‹€.

const duration = moment.duration('invalid');
const currentDate = moment();
const removeBeforeDate  = moment().subtract(duration);

console.log(`currentDate      : ${currentDate}`);
console.log(`removeBeforeDate : ${removeBeforeDate}`);

κ²°κ³Ό:

currentDate      : Fri Apr 13 2018 13:15:04 GMT+0200
removeBeforeDate : Fri Apr 13 2018 13:15:04 GMT+0200

κ²°κ³Ό:
ν˜„μž¬ λ‚ μ§œκΉŒμ§€μ˜ λͺ¨λ“  λ¦¬μ†ŒμŠ€κ°€ μ‚­μ œλ©λ‹ˆλ‹€...

μ§€κΈˆκΉŒμ§€ ꡬ문 뢄석 ν›„ 값을 ν…ŒμŠ€νŠΈν•˜λŠ” 경우 이 문제λ₯Ό ν•΄κ²°ν•  수 μžˆλŠ” μœ μΌν•œ 방법은 λ‹€μŒκ³Ό κ°™μŠ΅λ‹ˆλ‹€.

const duration = moment.duration('invalid');
if (duration.toISOString() === 'P0D') {
    // throw an Error
}

예, 이 λ²„κ·ΈλŠ” λ‚˜μ˜κ³  2014λ…„λΆ€ν„° μ—΄λ € μžˆμŠ΅λ‹ˆλ‹€. 이것은 "date-fns" ν”„λ‘œμ νŠΈκ°€ μ œλŒ€λ‘œ 된 κ²ƒμž…λ‹ˆλ‹€. 잘λͺ»λœ μž…λ ₯이 잘λͺ»λœ 경우 μ‹€μ œλ‘œ μ•Œλ €μ€λ‹ˆλ‹€. https://date-fns.org/ λΆˆν–‰νžˆλ„ date-fnsλŠ” μ‹œκ°„λŒ€ λ³€ν™˜μ„ μ²˜λ¦¬ν•˜μ§€ μ•Šμ§€λ§Œ μ™ΈλΆ€ 라이브러리λ₯Ό μ‚¬μš©ν•˜μ—¬ 이λ₯Ό μ²˜λ¦¬ν•˜λŠ” 방법이 μžˆμ„ 수 μžˆμŠ΅λ‹ˆλ‹€.

Moment ν”„λ‘œμ νŠΈκ°€ 이 문제λ₯Ό ν•΄κ²°ν•˜λ €λ©΄ 가비지 μž…λ ₯을 μˆ˜λ½ν•˜κ³  μœ νš¨ν•œ λ‚ μ§œλ‘œ μ²˜λ¦¬ν•˜λŠ” 것을 쀑단해야 ν•©λ‹ˆλ‹€. 이것이 더 λ‚˜μ€ λ™μž‘μ²˜λŸΌ λ³΄μ΄μ§€λ§Œ κΈ°μˆ μ μœΌλ‘œλŠ” "μ—­ν–‰ν•˜λŠ” λ™μž‘" λ³€κ²½μ΄λ―€λ‘œ 변경에 λŒ€ν•œ 저항이 μžˆλŠ” 것 κ°™μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ ν”„λ‘œμ νŠΈκ°€ μ§€λ‚œ 거의 4λ…„ λ™μ•ˆ 쑰치λ₯Ό μ·¨ν•˜μ§€ μ•Šμ•˜λ‹€λŠ” 점을 κ°μ•ˆν•  λ•Œ λ‚˜λŠ” 곧 μˆ˜μ •μ„ κΈ°λŒ€ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

이에 λŒ€ν•œ μ—…λ°μ΄νŠΈκ°€ μžˆμŠ΅λ‹ˆκΉŒ?

moment 2.23.0 λ₯Ό μ‚¬μš©ν•˜λ©΄ 잘λͺ»λœ ISO8601 λ¬Έμžμ—΄μ—μ„œ 지속 μ‹œκ°„μ„ μƒμ„±ν•˜λ €κ³  ν•  λ•Œ isValid() ν•¨μˆ˜λ„ true λ°˜ν™˜ν•©λ‹ˆλ‹€.

μ˜ˆμ‹œ:

const mom = moment.duration('asdf')
console.log(mom.isValid()) // This returns true, expected would be false 

μ’€ μ§œμ¦λ‚˜λ„€μš”. μ™„μ „νžˆμ˜ λͺ©μ  패배 isValid() 에 κΈ°λŠ₯ Duration κ²½μš°λΌλ„,이 였브젝트 (μ‹œ isValid() λ°˜ν™˜ false μˆœκ°„ 심지어 잘λͺ»λœ 해석 μ•ŠκΈ° λ•Œλ¬Έμ— μž…λ ₯?)

@robbiecloset μ—…λ°μ΄νŠΈλŠ” 4μ›”μ˜ λ§ˆμ§€λ§‰ κ²Œμ‹œλ¬Ό μ΄ν›„λ‘œ "date-fns" ν”„λ‘œμ νŠΈκ°€ μ‹œκ°„λŒ€ μ§€μ›μ—μ„œ 더 μ’‹μ•„μ‘ŒμŠ΅λ‹ˆλ‹€. 이제 이λ₯Ό 돕기 μœ„ν•œ "date-fns-timezone" 및 "date-fns-tz" ν”„λ‘œμ νŠΈκ°€ μžˆμŠ΅λ‹ˆλ‹€.

μ „ν™˜μ΄ κ°€λŠ₯ν•˜λ‹€λ©΄ μ‚¬μš©μ„ κ³ λ €ν•˜κ² μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” moment.duration(value).toISOString() === value , κ·Έ 값은 κ΅¬μ„±μ—μ„œ μ½μŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” moment.duration(value).toISOString() === valueλ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. κ·Έ 값은 κ΅¬μ„±μ—μ„œ μ½μŠ΅λ‹ˆλ‹€.

@bors-ltd λ‚΄ 생각에 문제의 μΌλΆ€λŠ” λ™μΌν•œ 인코딩 값을 μƒμ„±ν•˜λŠ” 두 값을 λ””μ½”λ”©ν•  수 μžˆλ‹€λŠ” κ²ƒμž…λ‹ˆλ‹€.

예: moment.duration('PT0M0S').toISOString() === moment.duration('PT0S').toISOString() .

ν…ŒμŠ€νŠΈλ₯Ό 보면 μœ νš¨ν•˜μ§€ μ•Šμ€ 값이 μ‹€μ œλ‘œ 사양과 λ³„κ°œμΈ κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

https://github.com/moment/moment/blob/2.24.0/src/test/moment/duration.js#L419 -L420

ISO 지속 μ‹œκ°„ ν‘œμ€€κ³Ό μΌμΉ˜ν•˜μ§€ μ•ŠλŠ” νŒ¨ν„΄μ€ "0"초둜 ν…ŒμŠ€νŠΈλ˜κ³  μžˆμŠ΅λ‹ˆλ‹€.

μ•ˆλ…•ν•˜μ„Έμš”, μš°λ¦¬λ„ isValid() λ©”μ†Œλ“œμ— λ™μΌν•œ λ¬Έμ œκ°€ μžˆμ—ˆκ³  κ²°κ΅­ μˆ˜λ™μœΌλ‘œ μˆ˜ν–‰ν–ˆμŠ΅λ‹ˆλ‹€.
const isValidDuration = duration => { return !!duration.match( /^(-?)P(?=\d|T\d)(?:(\d+)Y)?(?:(\d+)M)?(?:(\d+)([DW]))?(?:T(?:(\d+)H)?(?:(\d+)M)?(?:(\d+(?:\.\d+)?)S)?)?$/ ); };
λˆ„κ΅°κ°€λ₯Ό λ„μšΈ 수 있기λ₯Ό λ°”λžλ‹ˆλ‹€.

https://momentjs.com/docs/#/ -project-status/ μ°Έμ‘°

λͺ¨λ“  토둠에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

ν•΄ν‚€ μˆ˜μ •μ€ isValid λ©”μ†Œλ“œλ₯Ό 데이터 λΆ€λΆ„μ˜ 합이 > 0(λ˜λŠ” 적어도 μœ νš¨ν•˜μ§€ μ•Šμ„ κ°€λŠ₯성이 있음)μž„μ„ 보μž₯ν•˜λŠ” λ©”μ†Œλ“œλ‘œ λŒ€μ²΄ν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.

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