Moment: μ›”κ³Ό 일만 ν¬ν•¨λœ ν˜„μ§€ν™”λœ ν˜•μ‹ κ°€μ Έμ˜€κΈ°

에 λ§Œλ“  2016λ…„ 08μ›” 01일  Β·  20μ½”λ©˜νŠΈ  Β·  좜처: moment/moment

λ‘œμΌ€μΌ μ†ŒμŠ€ νŒŒμΌμ„ μ‚΄νŽ΄λ³΄λ‹ˆ 연도 정보 없이 μ›”, 일만 ν‘œμ‹œν•˜λŠ” ν˜•μ‹μ„ 찾을 수 μ—†μ—ˆμŠ΅λ‹ˆλ‹€. locale/zh-cn.js 파일의 ν•œ 예

longDateFormat : {
    LT : 'Ahη‚Ήmmεˆ†',
    LTS : 'Ahη‚Ήmεˆ†sη§’',
    L : 'YYYY-MM-DD',
    LL : 'YYYYεΉ΄MMMDζ—₯',
    LLL : 'YYYYεΉ΄MMMDζ—₯Ahη‚Ήmmεˆ†',
    LLLL : 'YYYYεΉ΄MMMDζ—₯ddddAhη‚Ήmmεˆ†',
    l : 'YYYY-MM-DD',
    ll : 'YYYYεΉ΄MMMDζ—₯',
    lll : 'YYYYεΉ΄MMMDζ—₯Ahη‚Ήmmεˆ†',
    llll : 'YYYYεΉ΄MMMDζ—₯ddddAhη‚Ήmmεˆ†'
},

λͺ©λ‘ ν˜•μ‹μ—λŠ” λͺ¨λ‘ 연도가 μžˆμŠ΅λ‹ˆλ‹€. LM λ˜λŠ” lm: 'MMMDζ—₯'κ³Ό 같은 ν˜•μ‹μ„ 지원할 수 μžˆμŠ΅λ‹ˆκΉŒ?

μ‘°μ–Έ λΆ€νƒλ“œλ¦½λ‹ˆλ‹€.

Enhancement

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

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 이 μ •κ·œμ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

moment().format('L').replace(new RegExp('[^\.]?' + moment().format('YYYY') + '.?'), '')

λ‹€μŒ λ³€ν™˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
05/04/2017 -> 05/04(예: 미ꡭ, GB)
2017-04-03 -> 04-03(예: swe)
2017λ…„ 8μ›” 7일 -> 8.7. (예: μ§€λŠλŸ¬λ―Έ)

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

ν˜„μž¬ μ›”κ³Ό 일만 μžˆλŠ” ν˜„μ§€ν™”λœ ν˜•μ‹ 토큰을 μ œκ³΅ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€. λ‹€μ–‘ν•œ λ‘œμΌ€μΌμ—μ„œ 이λ₯Ό ν‘œμ‹œν•˜λŠ” 방법이 두 가지 이상 μžˆμ„ 수 μžˆμœΌλ―€λ‘œ 이λ₯Ό μœ„ν•΄μ„œλŠ” λ°μ΄ν„°μ˜ μƒλ‹Ήν•œ ν™•μž₯이 ν•„μš”ν•©λ‹ˆλ‹€.

λ‘œμΌ€μΌ ν˜•μ‹μ— λ§žμΆ”λŠ” λŒ€μ‹  μ‚¬μš©μž 지정 ν˜•μ‹μ„ μ‚¬μš©ν•˜λŠ” 것이 더 μ‰¬μšΈ κ²ƒμž…λ‹ˆλ‹€.

이런 ν˜•μ‹λ„ ν•„μš”ν•©λ‹ˆλ‹€.
λͺ¨λ“  λ‹€λ₯Έ λ‘œμΌ€μΌμ—μ„œ μˆ˜μ •ν•΄μ•Ό ν•˜λ―€λ‘œ μ‚¬μš©μž μ •μ˜λ‘œ λ§Œλ“€κ³  싢지 μ•ŠμŠ΅λ‹ˆλ‹€. :)

여기도 λ§ˆμ°¬κ°€μ§€μž…λ‹ˆλ‹€.

그것을 κ³ λ €ν•˜κΈ° μœ„ν•΄ Intl.DateTimeFormat 은 κ΅¬ν˜„μ΄ μ΅œμ†Œν•œ λ‹€μŒ ν•˜μœ„ 집합을 지원해야 ν•œλ‹€κ³  λ§ν•©λ‹ˆλ‹€: (...) μ›”, 일(...). 관련이 없을 μˆ˜λ„ μžˆμ§€λ§Œ λ‘œμΌ€μΌλ³„ λ©”μ‹œμ§€μ— λŒ€ν•΄ κ³ λ €ν•˜λŠ” 것이 μ€‘μš”ν•©λ‹ˆλ‹€.

방금 λͺ¨λ“  μ–Έμ–΄ νŒŒμΌμ„ λ³΄μ•˜κ³  λŒ€λΆ€λΆ„μ˜ 언어에 λŒ€ν•΄ 이것은 맀우 μ‰¬μš΄ 것 κ°™μŠ΅λ‹ˆλ‹€...
@ mj1856 이 μž‘μ—…μ„ μ‹œμž‘ν•˜λŠ” 방법에 λŒ€ν•œ 아이디어가 μžˆμŠ΅λ‹ˆκΉŒ?

@kaljak ν˜•μ‹μ„ μΆ”κ°€ν•˜λŠ” 것은 μ‰½μ§€λ§Œ 주어진 μ–Έμ–΄λ‘œ 이것을 μ˜¬λ°”λ₯΄κ²Œ ν‘œν˜„ν•˜λŠ” 방법에 λŒ€ν•œ λ°μ΄ν„°λŠ” μ–΄λ””μ—μ„œ μ–»μŠ΅λ‹ˆκΉŒ? 이λ₯Ό μ•ŒκΈ° μœ„ν•΄μ„œλŠ” CLDRκ³Ό μœ μ‚¬ν•œ 좜처 λ˜λŠ” ν•΄λ‹Ή μ–Έμ–΄λ₯Ό κ΅¬μ‚¬ν•˜λŠ” μ‚¬λžŒμ΄ ν•„μš”ν•©λ‹ˆλ‹€.

λ˜ν•œ μ—¬κΈ°μ—μ„œ: https://github.com/andyearnshaw/Intl.js/blob/master/locale-data/json/ λ˜λŠ” https://github.com/unicode-cldr/cldr-dates-full/ ( μ—¬κΈ°μ—λŠ” μƒλŒ€ μ‹œκ°„μ— λŒ€ν•œ 짧은/쒁은 버전도 ν¬ν•¨λ˜μ–΄ μžˆμ–΄ 큰 도움이 λ©λ‹ˆλ‹€. :)).

관련이 μ—†μ§€λ§Œ μ–Έμ  κ°€λŠ” Intl.DateTimeFormat μ—μ„œ λ‘œμΌ€μΌ νŠΉμ • ν˜•μ‹μ„ νŒŒμƒν•˜κ³  νŠΉμ • λ‘œμΌ€μΌ 데이터λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” 것이 합리적일 수 μžˆμŠ΅λ‹ˆλ‹€.

이것도 ν•„μš”ν•©λ‹ˆλ‹€.

이 문제λ₯Ό ν•΄κ²°ν•˜κΈ° μœ„ν•΄ 이 μ •κ·œμ‹μ„ μ‚¬μš©ν•©λ‹ˆλ‹€.

moment().format('L').replace(new RegExp('[^\.]?' + moment().format('YYYY') + '.?'), '')

λ‹€μŒ λ³€ν™˜μ„ μˆ˜ν–‰ν•©λ‹ˆλ‹€.
05/04/2017 -> 05/04(예: 미ꡭ, GB)
2017-04-03 -> 04-03(예: swe)
2017λ…„ 8μ›” 7일 -> 8.7. (예: μ§€λŠλŸ¬λ―Έ)

이것에 +1.

우리 μ›Ήμ‚¬μ΄νŠΈλŠ” ν˜„μ§€ν™”λœ ν˜•μ‹μœΌλ‘œ λ‹€μŒκ³Ό 같은 것을 λ³΄μ—¬μ€λ‹ˆλ‹€.
Jan 5

λ‹€μŒκ³Ό 같은 μŠ€νŽ˜μΈμ–΄μ™€ 같은 μ–Έμ–΄λ‘œ 이 λ¬Έμžμ—΄μ„ ν‘œμ‹œν•˜λŠ” 쒋은 방법은 μ—†μŠ΅λ‹ˆλ‹€.
5 de Jan 연도 ν…μŠ€νŠΈλ₯Ό 자λ₯΄μ§€ μ•Šκ³  μ–Έμ–΄ 차이둜 인해 μœ μ§€ 관리할 수 μ—†λŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

즉 moment().locale('es')format('ll') // 5 de Jan de 2018

@stenvala 멋진 μ†”λ£¨μ…˜!

.format('ll') 와 ν•¨κ»˜ μ‚¬μš©ν•  λ•Œ , 접미사λ₯Ό μ–»μŠ΅λ‹ˆλ‹€. μœ„μ˜ λ‚΄μš©μ„ μˆ˜μ •ν•˜μ—¬ μ œκ±°ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•©λ‹ˆκΉŒ?

예: Jan 29, 2018 -> Jan 29,

λ‚˜λŠ” 같은 μš”κ΅¬μ— λΆ€λ”ͺμ³€κ³  μ§€μ›λ˜λŠ” 방식 λŒ€μ‹ μ— λ‹€μŒ μ½”λ“œλ₯Ό λ‚΄ μ„œλΉ„μŠ€ λ‚΄μ—μ„œ μ‚¬μš©ν•˜κ³  ν…œν”Œλ¦Ώμ—μ„œ μ‚¬μš©ν•˜κΈ° μœ„ν•΄ Angular νŒŒμ΄ν”„λ‘œ λž˜ν•‘ν•˜λŠ” λ„μš°λ―Έ ν΄λž˜μŠ€μ— λ„£μ—ˆμŠ΅λ‹ˆλ‹€. κ·€ν•˜μ˜ λ§ˆμΌλ¦¬μ§€λŠ” 맀우 높을 수 μžˆμ§€λ§Œ λͺ¨λ“  λ‘œμΌ€μΌ νŒŒμΌμ„ κ²€ν† ν–ˆμœΌλ©° μƒˆλ‘œμš΄ μ›” 및 일 ν˜•μ‹μ˜ 기초둜 "ll" ν˜•μ‹μ„ μ‚¬μš©ν•˜λŠ” λͺ¨λ“  λ‹€λ₯Έ μˆœμ—΄μ„ μ–»μ—ˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ‚˜λŠ” en, es, hy-am, hu, cv, ja, lv와 같은 λ‘œμΌ€μΌμ— λŒ€ν•΄ ν…ŒμŠ€νŠΈν–ˆμŠ΅λ‹ˆλ‹€. κ°κ°μ—λŠ” μ›” 이름에 μœ λ‹ˆμ½”λ“œ 문자λ₯Ό ν¬ν•¨ν•˜μ—¬ ν₯미둜운 μˆœμ—΄μ΄ μžˆμ—ˆμŠ΅λ‹ˆλ‹€.

if (format.indexOf("YYYY") === 0) {
        // In some locales, the Year is presented first, along with various punctuation (period, comma) as well as sometimes
        // hard coded words in brackets. The RegEx below strips everything off that shouldn't be there related to the YYYY prefix.
        return format.replace(/YYYY(\.)?(\s)?(\[([^\x00-\x7F]|\w)+\])?(\s)?/gi, '');
    }

    // In other locales, the year is presented at the end (or almost end). It can have various punctuation around it as well
    // as hard coded words in brackets. The RegEx below strips everything off that shouldn't be there related to the YYYY suffix.
    return format.replace(/(\s)?,?(\[([^\x00-\x7F]|\w)+\])?(\s)?YYYY.*/gi, '');

ν–‰μš΄μ„ λΉ•λ‹ˆλ‹€!

μΆ”μ‹  - μ €λŠ” RegEx μ „λ¬Έκ°€κ°€ μ•„λ‹ˆλ©° μœ„μ˜ ν‘œν˜„μ— μ΅œμ„ μ„ λ‹€ν–ˆμŠ΅λ‹ˆλ‹€. μž‘λ™ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ μ΅œμ ν™”λ  수 μžˆμŠ΅λ‹ˆλ‹€.

λ‚˜λŠ” κ²°κ΅­ λ‚΄κ°€ μ›ν•˜λŠ” 것을 μ–»κΈ° μœ„ν•΄ .format('MMMDo') ν–ˆμ§€λ§Œ μΌλ°˜μ μ΄μ§€λŠ” μ•Šμ§€λ§Œ 제 κ²½μš°μ—λŠ” 잘 μž‘λ™ν•©λ‹ˆλ‹€.

πŸ‘

λ§Žμ€ 언어에 λŒ€ν•œ ν˜•μ‹ 지정 κ·œμΉ™μ΄ μžˆλŠ” 데이터 μ†ŒμŠ€λ₯Ό μ‚¬μš©ν•˜λŠ” 것은 μ–΄λ–»μŠ΅λ‹ˆκΉŒ? λ‚˜λ¨Έμ§€ μ–Έμ–΄λŠ” 자리 ν‘œμ‹œμž ν…μŠ€νŠΈ p.exλ₯Ό μ–»μŠ΅λ‹ˆλ‹€. 'μ•ˆλ…• 개발자. κ·€ν•˜μ˜ μ–Έμ–΄ ν˜•μ‹μ„ moment.js ν”„λ‘œμ νŠΈμ— λ³΄κ³ ν•˜μ‹­μ‹œμ˜€. 감사 ν•΄μš”'

λ”°λΌμ„œ 일뢀 κ°œλ°œμžκ°€ 짧은 λ‚ μ§œ λ¬Έμžμ—΄μ΄ ν•„μš”ν•˜κ³  이λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 이 μš”μ²­μ„ λ°›κ³  μš”μ²­μ— 따라 간격이 λ‹«νž™λ‹ˆλ‹€.

λ‹€μŒμ€ Intl 을 μ‚¬μš©ν•˜λŠ” 또 λ‹€λ₯Έ ν•΄κ²° λ°©λ²•μž…λ‹ˆλ‹€. options 개체λ₯Ό μ‚¬μš©μž μ •μ˜ν•˜μ—¬ μ›ν•˜λŠ” ν˜•μ‹μ„ μ–»μœΌμ‹­μ‹œμ˜€. Intl.DateTimeFormat은 λ¬Έμžμ—΄μ˜ λͺ¨λ“  μ§€μ—­ν™”λœ μˆœμ„œμ™€ 지역 κ΅¬λΆ„μžλ₯Ό μ²˜λ¦¬ν•©λ‹ˆλ‹€.

const localizedDateMonthNoYear = (moment) => {
    if (window && window.Intl && window.Intl.DateTimeFormat) {
      let options = {
        weekday: 'short',
        month: 'short',
        day: '2-digit',
      }
      return new Intl.DateTimeFormat('default', options).format(moment.toDate())
    }
    return moment.format('ll');
}

3λ…„ λ™μ•ˆ moment.jsκ°€ λ‚ μ§œ/μ‹œκ°„ ν˜•μ‹ν™” λΌμ΄λΈŒλŸ¬λ¦¬λ‘œμ„œ μ™„μ „ν•œ κ²ƒμœΌλ‘œ κ°„μ£Όλ˜λŠ” 것을 λ°©ν•΄ν•˜λŠ” μ€‘μš”ν•œ λ¬Έμ œμ— λŒ€ν•œ μ›€μ§μž„μ΄ μ—†μŠ΅λ‹ˆλ‹€... 천천히 ν‘œμ€€μ΄ 되고 μžˆλŠ” Intl API에 κ°μ‚¬λ“œλ¦½λ‹ˆλ‹€.

Moment.js 핡심 개발자 쀑 μΌλΆ€λŠ” 이제 TC39 μ œμ•ˆμ— λŒ€ν•΄ μž‘μ—…ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 당신이 μ˜³μ•˜κΈ° λ•Œλ¬Έμ— 핡심 언어에 이 κΈ°λŠ₯ 쀑 일뢀λ₯Ό ν¬ν•¨ν•˜μ§€ μ•ŠλŠ” μ΄μœ λŠ” λ¬΄μ—‡μž…λ‹ˆκΉŒ?

JS Date의 toLocaleDateString λ©”μ†Œλ“œλ₯Ό μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€. 예

const getFormattedDateTime = dateTime => dateTime.toLocaleDateString('ru-RU', {
  month: 'short',
  day: 'numeric',
  hour: 'numeric',
  minute: 'numeric',
})

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

μš°λ¦¬λŠ” μƒˆλ‘œμš΄ 토큰을 μΆ”κ°€ν•˜μ§€ μ•Šμ„ κ²ƒμž…λ‹ˆλ‹€.

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