Moment: moment.js κ°μ²΄μ—μ„œ μ‹œκ°„λŒ€ 제거

에 λ§Œλ“  2015λ…„ 12μ›” 04일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: moment/moment

λ‚˜λŠ” datetimepicker.js λ₯Ό μ‚¬μš©ν•˜κ³  있으며 date ν•¨μˆ˜λŠ” moment.js 객체λ₯Ό λ°˜ν™˜ν•©λ‹ˆλ‹€. 둜컬 UTC μ˜€ν”„μ…‹μœΌλ‘œ μˆ˜ν–‰λ˜λ©° μ›λž˜ λ‚ μ§œμ—λŠ” λ‹€λ₯Έ μ˜€ν”„μ…‹μ΄ μžˆμŠ΅λ‹ˆλ‹€.

λ‚΄ μ›λž˜ λ‚ μ§œ:

2015-10-01T15:00:00.000Z

λ‚ μ§œ μ‹œκ°„ 선택기에 ν‘œμ‹œν•˜λŠ” λ‚΄μš©( DD-MM HH:mm ):

01-10 15:00

λ‚΄κ°€ μ–»λŠ” 것:

2015-10-01T15:40:00+01:00

λ‚΄κ°€ μ›ν•˜λŠ” 것:

2015-10-01T15:40:00+00:00

λ§ˆμ§€λ§‰μ— +01 μ˜€ν”„μ…‹μ„ μ œκ±°ν•œ 방법에 μœ μ˜ν•˜μ‹­μ‹œμ˜€.

둜컬 UTC에 μ μš©ν•˜λ €λ©΄ μ–΄λ–»κ²Œ ν•΄μ•Ό ν•©λ‹ˆκΉŒ? 이것은 01을 μˆ˜λ™μœΌλ‘œ μ œκ±°ν•˜μ§€ μ•Šκ³ λ„ κ°€λŠ₯ν•©λ‹ˆλ‹€(μ‚¬μš©μž μœ„μΉ˜μ— 따라 λ‹€λ₯Έ 둜컬 μ˜€ν”„μ…‹μ΄ 될 수 있음).

이것은 λ‚΄κ°€ λ‚ μ§œλ₯Ό μ–»κΈ° μœ„ν•΄ μ§€κΈˆκΉŒμ§€ κ°€μ§€κ³ μžˆλŠ” κ²ƒμ΄μ§€λ§Œ 같은 μ‹œκ°„μ„ μœ μ§€ν•˜μ—¬ μ˜€ν”„μ…‹μ„ μ œκ±°ν•˜λŠ” 방법을 λͺ¨λ₯΄κ² μŠ΅λ‹ˆλ‹€.

    var momentDate = timePicker.data("DateTimePicker").date();
    console.log(momentDate.format());
    //this prints  2015-10-01T15:40:00+01:00

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

const tmp = moment(valueAsDate).utc(true) - ν•„μš”ν•œ 것은 μ‹œκ°„λŒ€λ₯Ό λ¬΄μ‹œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ tmp.toISOString() 둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

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

μˆœκ°„μ€ μ›λž˜ λ‚ μ§œλ₯Ό ν˜„μ§€ μ‹œκ°„λŒ€ λ‚ μ§œλ‘œ ν˜•μ‹ν™”ν•©λ‹ˆλ‹€. 즉, 기계 μ‹œμŠ€ν…œμ΄ +08:00 μ‹œκ°„λŒ€λ₯Ό μ‚¬μš©ν•˜λŠ” 경우 2017-08-02 10:00:00+02:00은 2017-08-02 16:00:00+08:00으둜 ν˜•μ‹μ΄ μ§€μ •λ©λ‹ˆλ‹€.

μ‹œκ°„λŒ€λ₯Ό λ¬΄μ‹œν•˜κ³  μ›λž˜ λ‚ μ§œ ν˜•μ‹μ„ μ§€μ •ν•˜λŠ” ν•¨μˆ˜λ₯Ό μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€.

/**
 * <strong i="7">@desc</strong> use moment to format a datetime
 * <strong i="8">@param</strong> string|date|timestamp datetime: the datetime to format
   the given datetime can have timezone, and the timezone will be kept in the process of output datetime
   i.e. formate('2017-09-08 11:24:00+08:00', 'D/M/YYYY HH:mm:ss Z') =>  8/9/2017 11:24:00 +08:00, as you see, +08:00 is kept, which is different from moment default behavior
   if timezone has not been given, local timezone will be used.
 * <strong i="9">@param</strong> string formatter: the target format you want to get
 * <strong i="10">@param</strong> string givenFormatter: moment allow developer to define your own formatter, i.e. DD/MM/YYYY HH,mm,ss which is not a statndard time format
 * <strong i="11">@return</strong> string new formatted datetime string
 * <strong i="12">@example</strong>:
   1. format(new Date(), 'YYYY-MM-DD HH:mm:ss')
   2. format(your_date, 'YYYY-MM-DD HH:mm:ss', 'DD/MM/YYYY HH,mm,ss')
 */
export function format(datetime, formatter, givenFormatter) {
  let localTimezoneOffset = timezoneOffset()
  let givenTimezoneOffset = moment.parseZone(datetime).utcOffset()

  if (givenTimezoneOffset !== 0) {
    return moment(datetime, givenFormatter).utcOffset(givenTimezoneOffset).format(formatter)
  }
  else {
    // big problem: we do not know whether timezone has not been given or it is +00:00
    // if its utc time is the same with itself, it means timezone has been given
    let u = utc(datetime, 'YYYY-MM-DD HH:mm:ss')
    let t = moment(datetime).parseZone(datetime).format('YYYY-MM-DD HH:mm:ss')
    if (u === t) {
      return moment(datetime, givenFormatter).utc().format(formatter)
    }
    else {
      return moment(datetime).format(formatter)
    }
  }
}

μ†ŒμŠ€ μ½”λ“œ: https://github.com/tangshuang/moment-format

이 ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•˜μ—¬ λ‚ μ§œλ₯Ό ν˜•μ‹ν™”ν•˜λ©΄ μˆœκ°„ κΈ°λ³Έ ν˜•μ‹ 논리λ₯Ό λ¬΄μ‹œν•©λ‹ˆλ‹€. 2017-08-02 10:00:00+02:00은 2017/08/02 10:00:00+02:00κ³Ό 같은 ν˜•μ‹μ΄ λ©λ‹ˆλ‹€.

const tmp = moment(valueAsDate).utc(true) - ν•„μš”ν•œ 것은 μ‹œκ°„λŒ€λ₯Ό λ¬΄μ‹œν•˜λŠ” κ²ƒμž…λ‹ˆλ‹€.
예λ₯Ό λ“€μ–΄ tmp.toISOString() 둜 μ‚¬μš©ν•  수 μžˆμŠ΅λ‹ˆλ‹€.

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

κ΄€λ ¨ 문제

benhathaway picture benhathaway  Β·  3μ½”λ©˜νŠΈ

ninigix picture ninigix  Β·  3μ½”λ©˜νŠΈ

danieljsinclair picture danieljsinclair  Β·  3μ½”λ©˜νŠΈ

vbullinger picture vbullinger  Β·  3μ½”λ©˜νŠΈ

tanepiper picture tanepiper  Β·  3μ½”λ©˜νŠΈ