Moment: рдПрдХ рдкрд▓ рд╕реЗ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рдирд┐рдХрд╛рд▓реЗрдВредjs рд╡рд╕реНрддреБ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 4 рджрд┐рд╕ре░ 2015  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: moment/moment

рдореИрдВ datetimepicker.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЗрд╕рдХрд╛ date рдлрд╝рдВрдХреНрд╢рди рдПрдХ рдкрд▓ рджреЗрддрд╛ рд╣реИред рдЬреЗрдПрд╕ рдСрдмреНрдЬреЗрдХреНрдЯред рдпрд╣ рд╕реНрдерд╛рдиреАрдп рдпреВрдЯреАрд╕реА рдСрдлрд╕реЗрдЯ рдХреЗ рд╕рд╛рде рдРрд╕рд╛ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдореЗрд░реА рдореВрд▓ рддрд┐рдерд┐ рдореЗрдВ рдПрдХ рдЕрд▓рдЧ рдСрдлрд╕реЗрдЯ рд╣реИред

рдореЗрд░реА рдореВрд▓ рддрд┐рдерд┐:

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 рдСрдлрд╝рд╕реЗрдЯ рдХреЛ рдХреИрд╕реЗ рд╣рдЯрд╛рдпрд╛ред

рдореИрдВ рдЗрд╕реЗ рдХрд┐рд╕реА рд╕реНрдерд╛рдиреАрдп рдпреВрдЯреАрд╕реА рдХреЗ рд▓рд┐рдП рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВ? рдпрд╣ 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 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдкрд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдореВрд▓ рджрд┐рдирд╛рдВрдХ рдХреЛ рд╕реНрдерд╛рдиреАрдп рд╕рдордпрдХреНрд╖реЗрддреНрд░ рджрд┐рдирд╛рдВрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдпрд╛рдиреА 2017-08-02 10:00:00+02:00 рдХреЛ 2017-08-02 16:00:00+08: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 рд░реЗрдЯрд┐рдВрдЧреНрд╕