рдкрд▓ рдХреА рд╕рдорд╕реНрдпрд╛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдПрдХ рдХрд╣рд╛рдиреА

рдореЛрдореЗрдВрдЯреНрд╕.рдЬреЗрдПрд╕ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдФрд░ рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдбреЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдмрд╕реЗ рд▓реЛрдХрдкреНрд░рд┐рдп рдЬрд╛рд╡рд╛рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдореЗрдВ рд╕реЗ рдПрдХ рд╣реИред рдЬрд╣рд╛рдВ Node.js рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЙрдирдХреЗ рд▓рд┐рдП, рдЗрд╕ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдкреНрд░рд╛рдХреГрддрд┐рдХ рдХрджрдо рдерд╛ред Moment.js рдХреЗ рд╕рд░реНрд╡рд░ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рд╕рдорд╕реНрдпрд╛рдПрдВ рдЕрдкреЗрдХреНрд╖рд┐рдд рдирд╣реАрдВ рдереАрдВред рдЕрдВрдд рдореЗрдВ, рд╢реБрд░реВ рд╕реЗ рд╣реА, рдЙрдиреНрд╣реЛрдВрдиреЗ рддрд╛рд░реАрдЦреЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдЙрдкрдпреЛрдЧ рджреГрд╢реНрдпрдкрдЯрд▓ рдореЗрдВ рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рдХрд╛рдо рд╕реЗ рдкреНрд░рд╕рдиреНрди рдереЗред рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рддрдереНрдп рдХрд┐ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдиреЗ рдХреНрд▓рд╛рдЗрдВрдЯ рдкрд░ рдЕрдЪреНрдЫрд╛ рдкреНрд░рджрд░реНрд╢рди рдХрд┐рдпрд╛, рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рдерд╛ рдХрд┐ рд╕рд░реНрд╡рд░ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реЛрдЧреАред



рд╕рд╛рдордЧреНрд░реА, рдЬрд┐рд╕рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдЖрдЬ рд╣рдо рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░рддреЗ рд╣реИрдВ, рдкреНрд░рджрд░реНрд╢рди рд╕рдорд╕реНрдпрд╛ рдореЛрдореЗрдВрдЯ.рдЬреЗрдПрд╕ рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреА рдХрд╣рд╛рдиреА рдХреЛ рд╕рдорд░реНрдкрд┐рдд рд╣реИред

рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рд╡реГрджреНрдзрд┐ рдФрд░ рдЙрддреНрдкрд╛рджрдХрддрд╛ рдореЗрдВ рдЧрд┐рд░рд╛рд╡рдЯ


рд╣рд╛рд▓ рд╣реА рдореЗрдВ, рд╡реНрд╣рд┐рдЯреЛ рдкреНрд░рдгрд╛рд▓реА рджреНрд╡рд╛рд░рд╛ рд▓реМрдЯрд╛рдП рдЧрдП рдЙрдбрд╝рд╛рди рд░рд┐рдХреЙрд░реНрдбреЛрдВ рдХреА рд╕рдВрдЦреНрдпрд╛ рдореЗрдВ рд▓рдЧрднрдЧ рджрд╕ рдЧреБрдирд╛ рд╡реГрджреНрдзрд┐ рд╣реБрдИ рд╣реИред рддрдм рд╣рдореЗрдВ рдкреНрд░рджрд░реНрд╢рди рдореЗрдВ рдмрд╣реБрдд рдордЬрдмреВрдд рдЧрд┐рд░рд╛рд╡рдЯ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рд░реЗрдВрдбрд░рд┐рдВрдЧ рдЪрдХреНрд░, рдЬрд┐рд╕рдореЗрдВ 100 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕реЗ рдХрдо рд╕рдордп рдерд╛, рдЕрдм 5,000 рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдореЗрдВ 3 рд╕реЗрдХрдВрдб рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓рдЧрддрд╛ рд╣реИред рд╣рдорд╛рд░реА рдЯреАрдо рдиреЗ рдЕрдиреБрд╕рдВрдзрд╛рди рд╢реБрд░реВ рдХрд░ рджрд┐рдпрд╛ рд╣реИред рдХрдИ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рд╕рддреНрд░реЛрдВ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рджреЗрдЦрд╛ рдХрд┐ рдЗрд╕ рд╕рдордп рдХрд╛ 99% рд╕реЗ рдЕрдзрд┐рдХ рдПрдХ рдПрдХрд▓ рдлрд╝рдВрдХреНрд╢рди рдореЗрдВ рдЦрд░реНрдЪ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕реЗ createInZone рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред


CreateInZone рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдореЗрдВ рд▓рдЧрднрдЧ 3.3 рд╕реЗрдХрдВрдб рд▓рдЧрддреЗ рд╣реИрдВред

рд╕реНрдерд┐рддрд┐ рдХреА рд╣рдорд╛рд░реА рдЬрд╛рдВрдЪ рдЬрд╛рд░реА рд░рдЦрддреЗ рд╣реБрдП, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рдЗрд╕ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдореЛрдореЗрдВрдЯ.рдЬреЗрдПрд╕ parseZone рдлрд╝рдВрдХреНрд╢рди рджреНрд╡рд╛рд░рд╛ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред рд╡рд╣ рдЗрддрдиреА рдзреАрдореА рдХреНрдпреЛрдВ рд╣реИ? рд╣рдореЗрдВ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ Moment.js рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХреЛ рдЖрдо рдЙрдкрдпреЛрдЧ рдкрд░рд┐рджреГрд╢реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдбрд┐рдЬрд╝рд╛рдЗрди рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рдпрд╣ рдЗрдирдкреБрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рд╡рд┐рднрд┐рдиреНрди рддрд░реАрдХреЛрдВ рд╕реЗ рд╕рдВрд╕рд╛рдзрд┐рдд рдХрд░рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд░реЗрдЧрд╛ред рд╢рд╛рдпрдж рдЖрдкрдХреЛ рдЗрд╕реЗ рд╕реАрдорд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП? рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрдврд╝рдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ parseZone рдлрд╝рдВрдХреНрд╢рди рджрд┐рдирд╛рдВрдХ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рдПрдХ рд╡реИрдХрд▓реНрдкрд┐рдХ рддрд░реНрдХ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ:

 moment.parseZone(input, [format]) 

рд╣рдордиреЗ рдЬреЛ рдкрд╣рд▓реА рдЪреАрдЬ рдХреА рдереА, parseZone рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХреА рдЧрдИ рдереА, parseZone рддрд╛рд░реАрдЦ рдкреНрд░рд╛рд░реВрдк рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдорд┐рд▓ рдЬрд╛рдП, рд▓реЗрдХрд┐рди рдпрд╣, рдЬреИрд╕рд╛ рдХрд┐ рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рд╛ рд╣реИ, рдЗрд╕рд╕реЗ рдХреБрдЫ рднреА parseZone рдирд╣реАрдВ рд╣реБрдЖ:

 $ node bench.js moment#parseZone x 22,999 ops/sec ┬▒7.57% (68 runs sampled) moment#parseZone (with format) x 30,010 ops/sec ┬▒8.09% (77 runs sampled) 

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдЕрдм parseZone рдлрд╝рдВрдХреНрд╢рди рдиреЗ рдереЛрдбрд╝реА рддреЗрдЬреА рд╕реЗ рдХрд╛рдо рдХрд┐рдпрд╛, рд╣рдорд╛рд░реА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЧрддрд┐ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реНрдпрд╛рдкреНрдд рдирд╣реАрдВ рдереАред

рдкрд░рд┐рдпреЛрдЬрдирд╛-рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЕрдиреБрдХреВрд▓рди


рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреНрд░рджрд╛рддрд╛ рдХреЗ рдПрдкреАрдЖрдИ (рдЯреНрд░реИрд╡реЗрд▓рдкреЛрд░реНрдЯ) рд╕реЗ рдкреНрд░рд╛рдкреНрдд рддрд╛рд░реАрдЦреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдореЛрдореЗрдВрдЯ.рдЬреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ред рд╣рдордиреЗ рдорд╣рд╕реВрд╕ рдХрд┐рдпрд╛ рдХрд┐ рдпрд╣ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдбреЗрдЯрд╛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ:

 "2019-12-03T14:05:00.000-07:00" 

рдпрд╣ рдЬрд╛рдирдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдореЛрдореЗрдВрдЯ рдХреА рдЖрдВрддрд░рд┐рдХ рд╕рдВрд░рдЪрдирд╛ рдХреЛ рд╕рдордЭрдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ред рдЬреЗрдПрд╕ (рдЬреИрд╕рд╛ рдХрд┐ рд╣рдореЗрдВ рдЙрдореНрдореАрдж рдереА) рдПрдХ рдФрд░ рдЕрдзрд┐рдХ рдХреБрд╢рд▓ рдлрд╝рдВрдХреНрд╢рди рд▓рд┐рдЦрддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдкрд░рд┐рдгрд╛рдо рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИред

ParseZone рдХреЗ рд▓рд┐рдП рдПрдХ рддреЗрдЬрд╝ рд╡рд┐рдХрд▓реНрдк рдмрдирд╛рдирд╛


рдЖрд░рдВрдн рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдореЗрдВ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдХрд┐ рдореЛрдореЗрдВрдЯ.рдЬреЗ рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдХреИрд╕реЗ рджрд┐рдЦрддреЗ рд╣реИрдВред рдпрд╣ рд╕рдордЭрдирд╛ рдмрд╣реБрдд рдЖрд╕рд╛рди рдерд╛:

 > const m = moment() > console.log(m) Moment {  _isAMomentObject: true,  _i: '2019-12-03T14:05:00.000-07:00',  _f: 'YYYY-MM-DDTHH:mm:ss.SSSSZ',  _tzm: -420,  _isUTC: true,  _pf: { ...snip },  _locale: [object Locale],  _d: 2019-12-03T14:05:00.000Z,  _isValid: true,  _offset: -420 } 

рдЕрдЧрд▓рд╛ рдХрджрдо рдПрдХ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдмрд┐рдирд╛ рдкрд▓ рдХреЛ рддреНрд╡рд░рд┐рдд рдХрд░рдирд╛ рдерд╛:

 export function parseTravelportTimestamp(input: string) {  const m = {}  // $FlowIgnore  m.__proto__ = moment.prototype  return m } 

рдЕрдм рдРрд╕рд╛ рд▓рдЧ рд░рд╣рд╛ рдерд╛ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдореЛрдореЗрдВрдЯ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдмрд╣реБрдд рд╕рд╛рд░реЗ рдЧреБрдг рд╣реИрдВ рдЬреЛ рд╣рдо рдмрд╕ рд╕реЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ (рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рдХрд┐ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ рдЬрд╛рдирддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдЖрдк Moment.js рдХреЗ рд╕реЛрд░реНрд╕ рдХреЛрдб рдХреЛ рджреЗрдЦреЗрдВрдЧреЗ рддреЛ рдЖрдк рд╕рдордЭ рдЬрд╛рдПрдВрдЧреЗ):

 const FAKE = moment() const TRAVELPORT_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSSZ' export function parseTravelportTimestamp(input: string) {  const m = {}  // $FlowIgnore  m.__proto__ = moment.prototype  const offset = 0 // TODO  const date = new Date(input.slice(0, 23))  m._isAMomentObject = true  m._i = input  m._f = TRAVELPORT_FORMAT  m._tzm = offset  m._isUTC = true  m._locale = FAKE._locale  m._d = date  m._isValid = true  m._offset = offset  return m } 

рд╣рдорд╛рд░реЗ рдХрд╛рдо рдХрд╛ рдЕрдВрддрд┐рдо рдЪрд░рдг рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдирд╛ рдерд╛ рдХрд┐ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ offset рдореВрд▓реНрдп рдХреЛ рдкрд╛рд░реНрд╕ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рдПред рдпрд╣ рдкрддрд╛ рдЪрд▓рд╛ рдХрд┐ рдпрд╣ рд▓рд╛рдЗрди рдореЗрдВ рд╣рдореЗрд╢рд╛ рдПрдХ рд╣реА рд╕реНрдерд┐рддрд┐ рд╣реИред рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк, рд╣рдо рдЗрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдереЗ:

 function parseTravelportDateOffset(input: string) {  const hrs = +input.slice(23, 26)  const mins = +input.slice(27, 29)  return hrs * 60 + (hrs < 0 ? -mins : mins) } 

рдпрд╣рд╛рдБ рд╣рдо рдЗрд╕реЗ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдХреЗ рдмрд╛рдж рдХреНрдпрд╛ рд╣реБрдЖ рд╣реИ:

 const FAKE = moment() const TRAVELPORT_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSSZ' function parseTravelportDateOffset(input: string) {  const hrs = +input.slice(23, 26)  const mins = +input.slice(27, 29)  return hrs * 60 + (hrs < 0 ? -mins : mins) } /** *     ISO-8601,    : * - "2019-12-03T12:30:00.000-07:00" */ export function parseTravelportTimestamp(input: string): moment {  const m = {}  // $FlowIgnore  m.__proto__ = moment.prototype  const offset = parseTravelportDateOffset(input)  const date = new Date(input.slice(0, 23))  m._isAMomentObject = true  m._i = input  m._f = TRAVELPORT_FORMAT  m._tzm = offset  m._isUTC = true  m._locale = FAKE._locale  m._d = date  m._isValid = true  m._offset = offset  return m } 

рдкреНрд░рджрд░реНрд╢рди рдкрд░реАрдХреНрд╖рдг


рд╣рдордиреЗ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдПрдирдкреАрдПрдо рдореЙрдбреНрдпреВрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкрд░рд┐рдгрд╛рдореА рд╕рдорд╛рдзрд╛рди рдХреЗ рдкреНрд░рджрд░реНрд╢рди рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ред рдпрд╣рд╛рдБ рдмреЗрдВрдЪрдорд╛рд░реНрдХ рдХреЛрдб рд╣реИ:

 const FAKE = moment() const TRAVELPORT_FORMAT = 'YYYY-MM-DDTHH:mm:ss.SSSSZ' function parseTravelportDateOffset(input: string) {  const hrs = +input.slice(23, 26)  const mins = +input.slice(27, 29)  return hrs * 60 + (hrs < 0 ? -mins : mins) } /** *     ISO-8601,    : * - "2019-12-03T12:30:00.000-07:00" */ export function parseTravelportTimestamp(input: string): moment {  const m = {}  // $FlowIgnore  m.__proto__ = moment.prototype  const offset = parseTravelportDateOffset(input)  const date = new Date(input.slice(0, 23))  m._isAMomentObject = true  m._i = input  m._f = TRAVELPORT_FORMAT  m._tzm = offset  m._isUTC = true  m._locale = FAKE._locale  m._d = date  m._isValid = true  m._offset = offset  return m } 

рд╣рдорд╛рд░реЗ рдкреНрд░рджрд░реНрд╢рди рдЕрдиреБрд╕рдВрдзрд╛рди рдХреЗ рдкрд░рд┐рдгрд╛рдо рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣реИрдВ:

 $ node fastMoment.bench.js moment#parseZone x 21,063 ops/sec ┬▒7.62% (73 runs sampled) moment#parseZone (with format) x 24,620 ops/sec ┬▒6.11% (71 runs sampled) fast#parseTravelportTimestamp x 1,357,870 ops/sec ┬▒5.24% (79 runs sampled) Fastest is fast#parseTravelportTimestamp 

рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдирд┐рдХрд▓рд╛, рд╣рдо рд▓рдЧрднрдЧ 64 рдмрд╛рд░ рдЯрд╛рдЗрдорд╕реНрдЯреИрдореНрдк рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдХреЛ рдЧрддрд┐ рджреЗрдиреЗ рдореЗрдВ рдХрд╛рдордпрд╛рдм рд░рд╣реЗред рд▓реЗрдХрд┐рди рдЗрд╕рдиреЗ рд╕рд┐рд╕реНрдЯрдо рдХреЗ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╕рдВрдЪрд╛рд▓рди рдХреЛ рдХреИрд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛? рдпрд╣рд╛рдБ рдкреНрд░реЛрдлрд╛рдЗрд▓рд┐рдВрдЧ рдХреЗ рдкрд░рд┐рдгрд╛рдорд╕реНрд╡рд░реВрдк рдХреНрдпрд╛ рд╣реБрдЖред


ParseTravelportTimestamp рдХрд╛ рдХреБрд▓ рдирд┐рд╖реНрдкрд╛рджрди рд╕рдордп 40 рдПрдордПрд╕ рд╕реЗ рдХрдо рд╣реИред

рдкрд░рд┐рдгрд╛рдо рдХреЗрд╡рд▓ рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдереЗ: рд╣рдордиреЗ 3.3 рд╕реЗрдХрдВрдб рд╕реЗ рд╢реБрд░реБрдЖрдд рдХреА, рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХреА рддрд╛рд░реАрдЦреЛрдВ рдореЗрдВ рдЬрд╛ рд░рд╣реЗ рдереЗ, рдФрд░ 40 рдорд┐рд▓реАрд╕реЗрдХрдВрдб рд╕реЗ рднреА рдХрдо рд╕рдордп рдХреЗ рд▓рд┐рдП рдЖрдПред

рдкрд░рд┐рдгрд╛рдо


рдЬрдм рд╣рдордиреЗ рдЕрдкрдиреЗ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдкрд░ рдХрд╛рдо рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛, рддреЛ рд╣рдореЗрдВ рдмрд╕ рдПрдХ рднрдпрд╛рдирдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдХрд░рдирд╛ рдерд╛ред рд╣рдо рдХреЗрд╡рд▓ рдпрд╣ рдЬрд╛рдирддреЗ рдереЗ рдХрд┐ рд╣рдо рдЦреБрдж рдХреЛ рджреЛрд╣рд░рд╛ рд░рд╣реЗ рдереЗ: "рдЗрд╕реЗ рдкрд╣рд▓реЗ рдХрд╛рдо рдХрд░рдиреЗ рджреЛ, рд▓реЗрдХрд┐рди рдЖрдк рдмрд╛рдж рдореЗрдВ рдЕрдиреБрдХреВрд▓рди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ"ред

рдкрд┐рдЫрд▓реЗ рдХреБрдЫ рд╡рд░реНрд╖реЛрдВ рдореЗрдВ, рд╣рдорд╛рд░реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреА рдЬрдЯрд┐рд▓рддрд╛ рдХрд╛рдлреА рдмрдврд╝ рдЧрдИ рд╣реИред рд╕реМрднрд╛рдЧреНрдп рд╕реЗ, рдЕрдм рд╣рдо рдЙрд╕ рд╕реНрдерд╛рди рдкрд░ рдЖ рдЧрдП рд╣реИрдВ рдЬрд╣рд╛рдВ рд╣рдо рдЕрдкрдиреЗ "рдордВрддреНрд░" рдХреЗ рджреВрд╕рд░реЗ рднрд╛рдЧ рдкрд░ рдЬрд╛ рд╕рдХрддреЗ рд╣реИрдВ - рдЕрдиреБрдХреВрд▓рдиред

рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЙрд▓реНрдпреВрд╢рдВрд╕ рдиреЗ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЛ рдЖрдЬ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрдкрд╣реБрдВрдЪрд╛рдиреЗ рдореЗрдВ рдорджрдж рдХреАред рд▓реЗрдХрд┐рди рд╣рдо рдПрдХ "рдкреБрд╕реНрддрдХрд╛рд▓рдп" рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЗрд╕реЗ рд╣рд▓ рдХрд░рддреЗ рд╣реБрдП, рд╣рдордиреЗ рд╕реАрдЦрд╛ рдХрд┐ рдЕрдкрдиреА рдЬрд░реВрд░рддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдХрд░рдХреЗ рдЕрдкрдирд╛ рддрдВрддреНрд░ рдмрдирд╛рдХрд░, рд╣рдо рдЙрдкрднреЛрдХреНрддрд╛ рд╕рдВрд╕рд╛рдзрдиреЛрдВ рдХреЗ рдЙрдкрднреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдХреЛрдб рдХреЛ "рдЖрд╕рд╛рди" рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЕрдкрдиреЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдореВрд▓реНрдпрд╡рд╛рди рд╕рдордп рдмрдЪрд╛ рд╕рдХрддреЗ рд╣реИрдВред

рдкреНрд░рд┐рдп рдкрд╛рдардХреЛрдВ! рдХреНрдпрд╛ рдЖрдкрдХреЛ рдЗрд╕ рдЖрд▓реЗрдЦ рдореЗрдВ рдЪрд░реНрдЪрд╛ рдХреА рдЧрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЗ рд╕рдорд╛рди рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ рд╣реИ?


Source: https://habr.com/ru/post/hi468411/


All Articles