Moment: рдЕрдорд╛рдиреНрдп рдЕрд╡рдзрд┐рдпреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 28 рдЬреБрд▓ре░ 2014  ┬╖  44рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: moment/moment

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреЛрдИ рдЕрд╡рдзрд┐ рдкрд╛рд░реНрд╕ рд╕рдлрд▓ рд░рд╣рд╛ рдпрд╛ рдирд╣реАрдВ, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдлрд╝реАрд▓реНрдб рдХрд╛ рдирд┐рд░реАрдХреНрд╖рдг рдХрд░рдХреЗ рднреАред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИрдВ?

moment 2.23.0 рдХреЗ рд╕рд╛рде isValid() рдлрд╝рдВрдХреНрд╢рди рднреА true рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЕрдорд╛рдиреНрдп ISO8601 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдЕрд╡рдзрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг:

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

рдЗрд╕рдХреА рддрд░рд╣ рдХрд╖реНрдЯрдкреНрд░рдж рдЗрдореЛред рдФрд░ Duration рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрд░ isValid() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИ (рдХреНрдпрд╛ рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдорд▓рд╛ рднреА рд╣реИ, рдЬрдм isValid() false рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд▓ рдПрдХ рдЕрдорд╛рдиреНрдп рднреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдЗрдирдкреБрдЯ?)

рд╕рднреА 44 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдореИрдВ рд╕рд╣рдордд рд╣реВрдВред рд╢реБрд░реБрдЖрдд рдХреЗ рд░реВрдк рдореЗрдВ рд╣рдореЗрдВ рдПрдХ рд╡реИрдз рд╡рд┐рдзрд┐ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдорд╛рдиреНрдп рдЕрд╡рдзрд┐рдпреЛрдВ рдХреЛ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЕрдорд╛рдиреНрдп рдЕрд╡рдзрд┐рдпреЛрдВ рдХреА рд╡рд░реНрддрдорд╛рди рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдПрдХ рдмрдЧ рд╣реИ рдЬреЛ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рд╣реИред рдЗрди рдорд╛рдорд▓реЛрдВ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ:

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

рдкрд░рд┐рдгрд╛рдо рдХреНрдпрд╛ рд╣реЛрдЧрд╛? рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд░рддреЗ рдХрд┐ рдЦрд░рд╛рдм рдЗрдирдкреБрдЯ рдкрд░ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИред

рдЗрд╕рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдкреНрд░рднрд╛рд╡ рдкрдбрд╝рддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ duration add() рдФрд░ subtract() рдмрдЬрд╛рдп duration рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЗрдирдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рднреА рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ:

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

рдореИрдиреНрдпреБрдЕрд▓ рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдореИрдВ рдЖрдкрдХреЛ рдмрддрд╛ рд╕рдХрддрд╛ рд╣реВрдВ рдХрд┐ рдХреНрдпрд╛ рд╣реЛрддрд╛ рд╣реИ: moment рд╢реВрдиреНрдп рдХреА рдЕрд╡рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ "рд╕рдлрд▓" рд╣реЛрддрд╛ рд╣реИред

рдпрджрд┐ moment() рдиреЗ рдЦрд░рд╛рдм рдЗрдирдкреБрдЯ рдкрд░ рдХреЗрд╡рд▓ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрд╛ рд╣реЛрддрд╛, рддреЛ рдЗрди рдореБрджреНрджреЛрдВ рдХреА рддреБрд░рдВрдд рдкрд╣рдЪрд╛рди рдХрд░ рд▓реА рдЬрд╛рддреАред рдЪреВрдВрдХрд┐ рдпрд╣ рдЪреБрдкрдЪрд╛рдк "рд╕рдлрд▓" рд╣реБрдЖ, рдЗрд╕рд▓рд┐рдП рдПрдХ рд╡рд░реНрдЧ рдЧрд╛рд░рдмреЗрдЬ-рдЗрди, рдЧрд╛рд░рдмреЗрдЬ-рдЖрдЙрдЯ рдмрдЧ рдмрдирд╛ рд░рд╣рд╛ред

рдЪреВрдВрдХрд┐ рдЯрд╛рдЗрдк рдХреА рдЧрдИ рдЕрд╡рдзрд┐ рдХрд╛ рд╡реНрдпрд╡рд╣рд╛рд░ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдкрд░рд┐рднрд╛рд╖рд┐рдд рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЦрд░рд╛рдм рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдкрд░ рдЕрдкрд╡рд╛рджреЛрдВ рдХреЛ рдлреЗрдВрдХрдирд╛ рд╢реБрд░реВ рдХрд░рдирд╛ рдкрд╢реНрдЪрдЧрд╛рдореА рд╕рдВрдЧрдд рд╣реЛрдЧрд╛ред

рдпрджрд┐ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рднрд░реЛрд╕рд╛ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдЯрд╛рдЗрдкреЛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рддреЛ рдкрд░реАрдХреНрд╖рдг рдХрд░рддреЗ рд╕рдордп try/catch рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдпрджрд┐ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рд╡реИрдз рдЕрд╡рдзрд┐ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

+1 @ рдорд╛рд░реНрдХрд╕реНрдЯреЛрд╕ред

рдПрдХ strict рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╣реИ (рдЬреИрд╕реЗ рддрд╛рд░реАрдЦреЛрдВ рдХреЗ рд▓рд┐рдП рдХреНрд╖рдг рд╣реА) рдЬреЛ рдлреЗрдВрдХрддрд╛ рд╣реИ? рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рд╢реВрдиреНрдп рдХреА рдЕрд╡рдзрд┐ рд▓реМрдЯрд╛рдирд╛ рдХрд╛рдлреА рдЦрддрд░рдирд╛рдХ рд╣реИред

рдПрдХ strict рд╡рд┐рдХрд▓реНрдк рдмрд┐рдирд╛ рдХрд┐рд╕реА рдмрджрд▓рд╛рд╡ рдХреЗ рдмреЗрд╣рддрд░ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдЕрдорд╛рдиреНрдп рддрд┐рдерд┐рдпреЛрдВ рдХреЛ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╢реВрдиреНрдп рдЕрд╡рдзрд┐ рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╣рд▓реА рдЬрдЧрд╣ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╡реНрдпрд╡рд╣рд╛рд░ рд╣реИред

рдорд╛рдирд╛ред рдХреНрдпрд╛ рдХреЛрдИ рд╕рдВрднрд╛рд╡рд┐рдд рдкрд░рд┐рд╡рд░реНрддрди рдХреЗрд╡рд▓ рдХреНрд╖рдг@2.10 рдХреЗ рд╕рд╛рде

рд╢реЗрд╖ рдХреНрд╖рдг рдХреЗ рд╕рдорд╛рди рдкреИрдЯрд░реНрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ? рдПрдХ _isValid рдлрд╝реАрд▓реНрдб рдФрд░ рдПрдХ isValid() рд╡рд┐рдзрд┐ рд╣реИ рдФрд░ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд┐рдлрд▓ рд╣реЛрдиреЗ рдкрд░ рдПрдХ рдЕрд╡рдзрд┐ рдХреЛ рдЕрдорд╛рдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╕реЗрдЯ рдХрд░реЗрдВред

рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП, рдпрд╣рд╛рдБ рдЕрдиреНрдп рдкреНрд░рд▓реЗрдЦрд┐рдд рд╕реНрдерд╛рди рд╣реИрдВ рдЬрд╣рд╛рдБ isValid () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ:

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

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рд╕реЗ рд▓рд┐рдВрдХ рдХрд░рдирд╛ рдХреЛрдб рдЬрд╛рдирдмреВрдЭрдХрд░ рдирд╣реАрдВ рдерд╛, рд╣рд╛рд▓рд╛рдВрдХрд┐ рдХреЛрдб рдЙрд▓реНрд▓реЗрдЦ рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИрдВред

+1
рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдлрд▓ рд╣реБрдИ рдпрд╛ рдирд╣реАрдВ, рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХреА рдмрд╣реБрдд рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдпрджрд┐ рдкрд┐рдЫрдбрд╝реА рд╕рдВрдЧрддрддрд╛ рдПрдХ рдЪрд┐рдВрддрд╛ рдХрд╛ рд╡рд┐рд╖рдп рд╣реИ рддреЛ рдПрдХ рд╡рд┐рдзрд┐ Duration.parse(input: string, strict?: boolean = true): Duration рдкреЗрд╢ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЗрдирдкреБрдЯ рдЧрд▓рдд рд╣реЛрдиреЗ рдкрд░ рдлреЗрдВрдХ рджреЗрдЧрд╛ рдФрд░ strict рддрд░реНрдХ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рд╡рд░реНрддрдорд╛рди рд╡реНрдпрд╡рд╣рд╛рд░ рдЬрдм рд╣рдореЗрдВ рдордирдорд╛рдиреА рдбреЗрдЯрд╛ рдХреЗ рд▓рд┐рдП рд╕рднреА рд╢реВрдиреНрдп рдХреЗ рд╕рд╛рде рдЕрд╡рдзрд┐ рдорд┐рд▓ рд░рд╣реА рд╣реИ рддреЛ рдмрд╣реБрдд рдЕрдЬреАрдм рд╣реИред

+1
рдПрдХ рдЕрд╡рдзрд┐ рдкрд░ рдПрдХ isValid () рд╡рд┐рдзрд┐ рд╣реЛрдирд╛ (рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐ рдХреНрдпрд╛ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╕рдлрд▓ рдереА) рдЖрд╕рд╛рди рд╣реЛрдЧрд╛

рд╣рд╛рдп рд╕рдм, рдореЛрдореЗрдВрдЯ 2.18.0 рдореЗрдВ рдЕрдм рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП .isValid рд╡рд┐рдзрд┐ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рдХрд╛рдлреА рдЙрджрд╛рд░ рд╣реИред @markstos @theazureshadow рдФрд░ рдЕрдиреНрдп, рдЗрд╕реЗ рдЖрдЬрд╝рдорд╛рдПрдВ рдФрд░ рдЕрдЧрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рд╕реБрдЭрд╛рд╡ рд╣реИрдВ рддреЛ рд╣рдореЗрдВ рдмрддрд╛рдПрдВред

@marwahaha ,

рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВ рдКрдкрд░ рджрд┐рдП рдЧрдП рдЙрджрд╛рд╣рд░рдгреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рдХреЙрдкреА/рдкреЗрд╕реНрдЯ рдХрд░рддрд╛ рд╣реВрдВред рдЕрдкреЗрдХреНрд╖рд┐рдд рд░реВрдк рд╕реЗ рд╕рд╣реА рдпрд╛ рдЧрд▓рдд рд▓реМрдЯрдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдпрд╣ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ (рдХреНрд╖рдг 2.18.0 рдХреЗ рд╕рд╛рде):

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

(рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрдкрд╡рд╛рдж рдХреЛ рдлреЗрдВрдХреЗ рдЕрдорд╛рдиреНрдп рдЕрд╡рдзрд┐ рдЕрднреА рднреА "рд╕рдлрд▓ рд╣реБрдИ", рд▓реЗрдХрд┐рди рдЕрдм рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЬрд╛рдВрдЪ рдХрд░ рд░рд╣реА рд╣реИ рдХрд┐ рдпрд╣ рд╡реИрдз рд╣реИ рдпрд╛ рдирд╣реАрдВ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХрддрд╛ рд╣реИ!)

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдРрд╕рд╛ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ рдХрд┐ рдЕрднреА рддрдХ рдирдИ рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╢рд╛рдпрдж рдпрд╣ рдЗрдЪреНрдЫрд┐рдд рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рд╣реИред

@markstos рдореИрдВрдиреЗ рдЙрд╕ рдХреЛрдб рдХреЛ Momentjs.com рдХреЗ рдХрдВрд╕реЛрд▓ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ - рдЬрд┐рд╕рдореЗрдВ 2.18.0 рд╣реИ - рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗред рдХреНрдпрд╛ рд╣рдо рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЕрдзрд┐рдХ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?

рд╢рд╛рдпрдж, рд╡рд╣ рдХреЛрдб рдЕрдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ рдорд┐рдирдЯреЛрдВ рдХреА рд╡рд░реНрддрдиреА рдЧрд▓рдд рд╣реИред

21 рдорд╛рд░реНрдЪ 2017 рдХреЛ рджреЛрдкрд╣рд░ 2:35 рдмрдЬреЗ, "рдореИрдЧреА рдкрд┐рдВрдЯ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@markstos https://github.com/markstos рдореИрдВрдиреЗ рдЕрднреА рдЙрд╕ рдХреЛрдб рдХреЛ рдореЗрдВ рдЪрд▓рд╛рдпрд╛ рд╣реИ
Momentjs.com рдХрд╛ рдХрдВрд╕реЛрд▓ - рдЬрд┐рд╕рдореЗрдВ 2.18.0 рд╣реИ - рдмрд┐рдирд╛ рдХрд┐рд╕реА рд╕рдорд╕реНрдпрд╛ рдХреЗред рдХреНрдпрд╛ рд╣рдо рдкреНрд░рд╛рдкреНрдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ
рдЙрд╕ рдкрд░ рдЕрдзрд┐рдХ рд╡рд┐рд╡рд░рдг?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/moment/moment/issues/1805#issuecomment-288176838 , рдпрд╛ рдореНрдпреВрдЯ рдХрд░реЗрдВ
рд╕реВрддреНрд░
https://github.com/notifications/unsubscribe-auth/ACbGmWIF24KlRs8oiS2wTn206iJNMod7ks5roBhfgaJpZM4CRuVM
.

@maggiepint @marwahaha рд╣рд╛рдВ, "рдорд┐рдирдЯ" рдХреА рдЧрд▓рдд рд╡рд░реНрддрдиреА рдпрд╣ рд╣реИ рдХрд┐ рдЕрд╡рдзрд┐ рдЕрдорд╛рдиреНрдп рдХреНрдпреЛрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред

@markstos рдореИрдВ

screen shot 2017-03-22 at 10 38 06

(рдЬрд╛рд╣рд┐рд░ рд╣реИ рдХрд┐ рдорд╛рд░реНрдХ рдЗрд╕ рд╕реНрдерд┐рддрд┐ рдореЗрдВ isValid рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП false рдерд╛, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрдкрд╡рд╛рдж рд╕реЗ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рд╣реИред рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП 100% рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдСрдмреНрдЬреЗрдХреНрдЯ рдЗрдирдкреБрдЯ рдХреЗ рд╕рд╛рде рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡реИрдзрддрд╛ рдХреЛ рдХреИрд╕реЗ рд╕рдВрднрд╛рд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред)

рдореИрдВ 2.18.1 рдХреЗ рд╕рд╛рде рдЕрдкрд╡рд╛рдж рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╢рд╛рдпрдж рдпрд╣ рдПрдХ рдЭреВрдард╛ рдЕрд▓рд╛рд░реНрдо рдерд╛ред рдореИрдВ "isValid ()" рдХреЗ рд▓рд┐рдП "рд╕рддреНрдп" рд▓реМрдЯрдиреЗ рд╡рд╛рд▓реА рдЗрд╕ рддрд░рд╣ рдХреА рдЕрдорд╛рдиреНрдп рдЕрд╡рдзрд┐ рд╣реЛрдиреЗ рдХреЗ @butterflyhug рдХреЗ рдкрд░рд┐рдгрд╛рдо рдХреЛ рдкреБрди: рдЙрддреНрдкрдиреНрди

рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд▓рдд-рд╡реИрдз рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд░реВрдк рдореЗрдВ "0 рдорд┐рдирдЯ" рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП?

рдЪрд╛рд╣рд┐рдП рдПрдХ рдЕрд▓рдЧ рд╕рд╡рд╛рд▓ рд╣реИ, рд▓реЗрдХрд┐рди IIRC рдЬреЛ рдХрд░рддрд╛ рд╣реИ рдЙрд╕рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ
рдорд╛рди рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХреНрдпреЛрдВрдХрд┐ рдЗрдХрд╛рдИ рд╣реИрд╢рдЯреЗрдмрд▓ рдореЗрдВ рдЗрдХрд╛рдИ рдирд╣реАрдВ рдорд┐рд▓реА рд╣реИред

рдХреНрдпрд╛ рдпрд╣ рдЕрдорд╛рдиреНрдп рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП? рдЖрдИрдПрдордУ рд╢рд╛рдпрджред

22 рдорд╛рд░реНрдЪ, 2017 рдХреЛ рд╕реБрдмрд╣ 8:42 рдмрдЬреЗ, "рдорд╛рд░реНрдХ рд╕реНрдЯреЛрд╕рдмрд░реНрдЧ" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

рдореИрдВ 2.18.1 рдХреЗ рд╕рд╛рде рдЕрдкрд╡рд╛рдж рдХреЛ рдкреБрди: рдкреЗрд╢ рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рд╢рд╛рдпрдж рдпрд╣ рдЭреВрда рдерд╛
рдЕрд▓рд╛рд░реНрдоред рдореИрдВ @butterflyhug https://github.com/butterflyhug 's . рдХреЛ рдкреБрди: рдкреЗрд╢
рдЗрд╕ рдкреНрд░рдХрд╛рд░ рдХреА рдЕрдорд╛рдиреНрдп рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП "рд╕рддреНрдп" рд▓реМрдЯрдиреЗ рдХрд╛ рдкрд░рд┐рдгрд╛рдо
"рдпрд╣ рд╕рд╣реА рд╣реИ()"ред

рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ "0 рдорд┐рдирдЯ" рдХреЛ a . рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдкрд╛рд░реНрд╕рд┐рдВрдЧ рд╡рд┐рдлрд▓ рдирд╣реАрдВ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдП
рдкрд░рд┐рдгрд╛рдо рдХреЗ рд░реВрдк рдореЗрдВ рдЧрд▓рдд-рд╡реИрдз рдЖрдЙрдЯрдкреБрдЯ?

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛ред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ 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 рдорд┐рдирдЯ' рдХреЛ '0 рдорд┐рдирдЯ' рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рдФрд░ рдкрд░рд┐рдгрд╛рдо "рд╡реИрдз" рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдПрдХ рдмрдЧ рд╣реИред рдЗрд╕реЗ рдареАрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдпрд╣ рдПрдХ рдмреНрд░реЗрдХрд┐рдВрдЧ рдмрджрд▓рд╛рд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдПрдХ рдмрдЧ рдлрд┐рдХреНрд╕ рд╣реИред

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

рдЙрд╕ рдорд╛рдорд▓реЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдЖрдк moment({'minutes': 3, '$cacheKey': 92619502}).isValid() рдЬреИрд╕реЗ рдХреБрдЫ рдкрд╛рд░реНрд╕ рдХрд░рддреЗ рд╣реИрдВред рдореИрдВ рджреГрдврд╝рддрд╛ рд╕реЗ рдЙрдореНрдореАрдж рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдРрд╕реЗ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╣реИрдВ рдЬреЛ рдЙрд╕ рдкрд╛рд░реНрд╕ рдХреЛ рдПрдХ рд╡реИрдз рдХреНрд╖рдг рдХреЗ рд░реВрдк рдореЗрдВ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдореБрдЭреЗ рдЗрд╕ рдЙрджрд╛рд╣рд░рдг рдФрд░ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд▓рд┐рдЦреЗ рдЧрдП рдмрдЧ рдХреЗ рдмреАрдЪ рдПрдХ рд╕реИрджреНрдзрд╛рдВрддрд┐рдХ рдЕрдВрддрд░ рдирд╣реАрдВ рджрд┐рдЦрддрд╛ рд╣реИред

рд╣рдо рдЬрд┐рд╕ рдПрдкреАрдЖрдИ рдкрд░ рдЪрд░реНрдЪрд╛ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╡рд╣ moment рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП "рдСрдмреНрдЬреЗрдХреНрдЯ рдкрд╛рд░реНрд╕рд░" рд╣реИ, рдЬрд┐рд╕реЗ рдпрд╣рд╛рдВ рдкреНрд░рд▓реЗрдЦрд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ:

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

рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдЕрдЬреНрдЮрд╛рдд рдпрд╛ рдЕрддрд┐рд░рд┐рдХреНрдд рддрд░реНрдХ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдЙрдкрдЪрд╛рд░ рдкрд░ рдЪреБрдк рд╣реИред

рдЕрднреА, рдпрд╣рд╛рдВ рдореЛрдореЗрдВрдЯ рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЛ "рдХрдЪрд░рд╛ рдЕрдВрджрд░, рдХрдЪрд░рд╛ рдмрд╛рд╣рд░" рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдгрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдХрдЪрд░рд╛ рдЗрдирдкреБрдЯ рдЪреБрдкрдЪрд╛рдк рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд▓рд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдкрд░рд┐рдгрд╛рдо "рдХрдЪрд░рд╛ рдмрд╛рд╣рд░" рд╣реЛрддрд╛ рд╣реИ - рдЧрд▓рдд рд╡рд░реНрддрдиреА рд╡рд╛рд▓реА рддрд┐рдерд┐рдпреЛрдВ рдХреЛ рдЕрдиреНрдп рддрд┐рдерд┐рдпреЛрдВ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ рд╡реИрдз рдорд╛рдирд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ!

рдпреЗ рдЕрдкрдбреЗрдЯ рдбреЗрд╡рд▓рдкрд░ рдХреЛ рдЬрд▓реНрдж рд╕реЗ рдЬрд▓реНрдж рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдВрдЧреЗ рдХрд┐ рдЙрдиреНрд╣реЛрдВрдиреЗ рдХреЛрдИ рдЧрд▓рддреА рдХреА рд╣реИ:

  • рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдХрд┐ рдПрдХ рдЕрдкрд╡рд╛рдж рдХреЛ рдЕрдЬреНрдЮрд╛рдд рддрд░реНрдХреЛрдВ рдореЗрдВ рдлреЗрдВрдХ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдкрд╛рд╕ рдХрд░ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

    • рдпрджрд┐ рдСрдмреНрдЬреЗрдХреНрдЯ рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЛ рдЕрдЬреНрдЮрд╛рдд рддрд░реНрдХ рджрд┐рдП рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдПрдХ рдЕрдкрд╡рд╛рдж рдлреЗрдВрдХ рджреЗрдВ

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

рдпрд╣ рд╕реБрдзрд╛рд░ рдПрдХ "рдмреНрд░реЗрдХрд┐рдВрдЧ" рдмрджрд▓рд╛рд╡ рдХреЗ рд▓рд╛рдпрдХ рд▓рдЧрддрд╛ рд╣реИред

рдореБрдЭреЗ рдмрд╕ рдЗрд╕рдХреЗ рджреНрд╡рд╛рд░рд╛ рдХрд╛рдЯ рд▓рд┐рдпрд╛ рдЧрдпрд╛ рдерд╛: moment().subtract('1 day') ... рдпрд╣ рдЕрд╡рдзрд┐ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдПрдХ рд╡реИрдз рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореИрдВ рдЙрдореНрдореАрдж рдирд╣реАрдВ рдХрд░рддрд╛ рдХрд┐ рдпрд╣ .subtract(0) рдмрд░рд╛рдмрд░ рд╣реЛрдЧрд╛ред рдЖрдИрдПрдордУ, рдЗрд╕ рдорд╛рдорд▓реЗ рдореЗрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдпрдЬрдирдХ рдмрд╛рдд рдлреЗрдВрдХрдирд╛ рд╣реИред

@johnvh рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред

рдЖрдк рдЬрд╛рдирддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ "рдЕрд╡рдзрд┐ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рд╡реИрдз рддрд░реАрдХрд╛" рдирд╣реАрдВ рд╣реИ, рдлрд┐рд░ рднреА рдЖрдк рдЙрд╕ рдХреЛрдб рдХреЛ рд╡реИрд╕реЗ рднреА рд▓рд┐рдЦрддреЗ рд╣реИрдВ? рдЖрдк рдХреНрдпрд╛ рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ? рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдХрд╛рдо рдХрд┐рдпрд╛ рд╣реИ, рд▓реЗрдЦрдХреЛрдВ рджреНрд╡рд╛рд░рд╛ рдкреНрд░рджрд╛рди рдХрд┐рдП рдЧрдП рдЙрддреНрдХреГрд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреНрд╖рдг рд╕реЗ рдЕрд╡рдзрд┐ рд╡реНрдпрдХреНрдд рдХрд░рдиреЗ рдХрд╛ рдпрд╣ рдПрдХ рд╡реИрдз рддрд░реАрдХрд╛ рдирд╣реАрдВ рдерд╛?

25/04/2017 рдХреЛ, 08:29 рдмрдЬреЗ, рдорд╛рд░реНрдХ рд╕реНрдЯреЛрд╕рдмрд░реНрдЧ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:

@johnvh рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рд╣рдордд рд╣реВрдВред

-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЗрд╕ рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рд╕реАрдзреЗ рдЙрддреНрддрд░ рджреЗрдВ, рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ, рдпрд╛ рдереНрд░реЗрдб рдХреЛ рдореНрдпреВрдЯ рдХрд░реЗрдВред

@simonfox рдбреЗрд╡рд▓рдкрд░реНрд╕ рдЗрдВрд╕рд╛рди рд╣реИрдВред рд╣рдо рдЧрд▓рддреА рдХрд░рддреЗ рд╣реИрдВред рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░рд╛ рдЖрдзрд╛ рдХреЛрдб рдмреЗрд╕ рдЯреЗрд╕реНрдЯ рд╣реИред рдореЛрдореЗрдВрдЯ рдбреЙрдХреНрдпреВрдореЗрдВрдЯреЗрд╢рди /is/рдЙрддреНрдХреГрд╖реНрдЯ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдЕрдЧрд░ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдПрдкреАрдЖрдИ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдпрд╛рдж рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИред рдпрд╣реА рдХрд╛рд░рдг рд╣реИ рдХрд┐ рди рдХреЗрд╡рд▓ рдорд╣рд╛рди рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдмрд▓реНрдХрд┐ рдХреЛрдб рднреА рд╕рд╣рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рдЕрдорд╛рдиреНрдп рдЗрдирдкреБрдЯ рдкрд░ рдЪреБрдкрдЪрд╛рдк рдЕрдорд╛рдиреНрдп рдЗрдирдкреБрдЯ рдХреЛ рдЯреВрдЯреЗ рд╣реБрдП "рд╡реИрдз" рдЗрдирдкреБрдЯ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рд╡рд┐рдлрд▓ рд░рд╣рддрд╛ рд╣реИред рдпрджрд┐ @johnvh рдХреЛ рдЙрд╕рдХреЗ рдХреЛрдб рдХреЗ рдЪрд▓рдиреЗ рдкрд░ рддреБрд░рдВрдд рдПрдХ рд╕рддреНрдпрд╛рдкрди рд╡рд┐рдлрд▓рддрд╛ рдорд┐рд▓реА рдереА, рддреЛ рд╡рд╣ рдпрд╣ рджреЗрдЦрдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрдХреГрд╖реНрдЯ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реАрдХрд░рдг рдХреА рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддрд╛ рдерд╛ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХреНрдпрд╛ рд╣реЛ рд╕рдХрддреА рд╣реИред рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, рдореЛрдореЗрдВрдЯ рдиреЗ рдЕрдорд╛рдиреНрдп рдЗрдирдкреБрдЯ рдХреЛ рдорд╛рдиреНрдп рдорд╛рдирд╛ рдФрд░ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдЕрд▓рд╛рд░реНрдо рдХреЗ рдЙрдард╛рдпрд╛ред

@markstos рдмрд┐рд▓реНрдХреБрд▓ред рдореИрдВ 100% рд╕рд╣рдордд рд╣реВрдБред

рдпрд╣ рдПрдХ рдмрдЧ рдерд╛ рдЬрд┐рд╕реЗ рдЯреНрд░реИрдХ рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдерд╛ред рд╣рдордиреЗ рдЗрд╕реЗ рдЗрд╕ рддрд░рд╣ рдирд╣реАрдВ рд▓рд┐рдЦрд╛ рдерд╛, рдпрд╣ рдЬрд╛рдирддреЗ рд╣реБрдП рдХрд┐ рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдорд╛рдиреНрдп рдерд╛ред рдпрд╣ рд╕рд╣реА рд▓рдЧрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рд╕рдордп рдЙрдирдХреЗ рд╕рдорд░реНрдерд┐рдд рд╣рд╕реНрддрд╛рдХреНрд╖рд░реЛрдВ рдореЗрдВ рд╣реЗрд░рдлреЗрд░ рдХреЗ рддрд░реАрдХреЗ рдмрд╣реБрдд рдЙрджрд╛рд░ рд╣реИрдВред рд╣рдо рдЙрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рдПрдЬреЗрдВрдбрд╛ рдХрд╛ рднреА рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рдорд╛рдирд╡-рдЕрдВрддрд░рд╛рд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рддреЛ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреБрдЫ рдРрд╕рд╛ рд╣реЛрдЧрд╛ рдЬреЛ рдХреЗрд╡рд▓ рдкрдВрдХреНрддрд┐рдпреЛрдВ рдХреЛ рдЕрд▓рдЧ рдХрд░рддрд╛ рд╣реИ:

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

рдмрд╛рдж рд╡рд╛рд▓рд╛ рдЗрд░рд╛рджрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдкреВрд░реНрд╡ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрджрд┐ рдкреВрд░реНрд╡ рдиреЗ рдЕрдкрд╡рд╛рдж рдЙрдард╛рдпрд╛ рд╣реЛрддрд╛, рддреЛ рдпрд╣ рд╣рдореЗрдВ рд╣рдорд╛рд░реА рдЧрд▓рддреА рдХреЗ рдкреНрд░рддрд┐ рд╕рдЪреЗрдд рдХрд░ рджреЗрддрд╛ред

рд╕рд╛рде рд╣реА, рдпрд╣ рддрдереНрдп рдХрд┐ Moment /has/ a isValid() рд╡рд┐рдзрд┐ рдХрд╛ рддрд╛рддреНрдкрд░реНрдп рд╣реИ рдХрд┐ рдпрд╣ рдорд╛рдиреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдпрд╛ рдЕрдорд╛рдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдорд╛рдиреНрдп рдХрд░рддрд╛ рд╣реИред рдРрд╕реЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдЬрд╣рд╛рдВ рдЕрдорд╛рдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рдорд╛рдиреНрдп рдХреЗ рд░реВрдк рдореЗрдВ рд╡рд░реНрдЧреАрдХреГрдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, isValid() рд╡рд┐рдзрд┐ рджрд╕реНрддрд╛рд╡реЗрдЬ рдХреЗ рд░реВрдк рдореЗрдВ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддреА рдкреНрд░рддреАрдд рд╣реЛрддреА рд╣реИред

рдирдорд╕реНрддреЗ, рд╣рдо рдЗрд╕ рдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХрд┐рд╕реА рднреА рдкреАрдЖрд░ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗ!

рдореИрдВ рдЗрд╕ рдмрдЧ, рдпрд╛ рдЗрд╕рдХреЗ рд╕рдорд╛рди рдХреБрдЫ рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ред рдЕрдЧрд░ рдореИрдВ рдореЛрдореЗрдВрдЯ 2.18.1 рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ moment.duration('3', 'minutes').asMinutes() рдЪрд▓рд╛рддрд╛ рд╣реВрдВ, рддреЛ рдореБрдЭреЗ moment.duration('3', 'minutes').isValid() рдХреЛ false рд╡рд╛рдкрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

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

рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдзреНрдпрд╛рди рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ?

@TomJSmith рдПрдХ рддреНрд╡рд░рд┐рдд рдкрд░реАрдХреНрд╖рдг рд╕реЗ рдкрддрд╛ рдЪрд▓рддрд╛ рд╣реИ рдХрд┐ рдмрдЧ рдЕрднреА рднреА рдореМрдЬреВрдж рд╣реИред рдпрд╣ рдХреЛрдб:

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

"рд╕рдлрд▓", рдЕрдкреЗрдХреНрд╖рд╛рдиреБрд╕рд╛рд░ рдПрдХ рджрд┐рди рдХреЗ рдмрдЬрд╛рдп рд╢реВрдиреНрдп рджрд┐рди рдШрдЯрд╛рдирд╛ред рдЖрдк рдкрд░рд┐рдгрд╛рдореА рддрд┐рдерд┐ рдкрд░ .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 рд╕реЗ рдЦреБрд▓рд╛ рд╣реИред рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ "рдбреЗрдЯ-рдПрдлрдПрдирдПрд╕" рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рд╣реА рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред рд╡реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЖрдкрдХреЛ рдмрддрд╛рддреЗ рд╣реИрдВ рдХрд┐ рдХреНрдпрд╛ рдЕрдорд╛рдиреНрдп рдЗрдирдкреБрдЯ рдЕрдорд╛рдиреНрдп рд╣реИред https://date-fns.org/ рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ, date-fns рд╕рдордп рдХреНрд╖реЗрддреНрд░ рд░реВрдкрд╛рдВрддрд░рдгреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓ рдирд╣реАрдВ рдкрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рд╢рд╛рдпрдж рдмрд╛рд╣рд░реА рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдВрднрд╛рд▓рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИред

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

рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИрдВ?

moment 2.23.0 рдХреЗ рд╕рд╛рде isValid() рдлрд╝рдВрдХреНрд╢рди рднреА true рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдЬрдм рдПрдХ рдЕрдорд╛рдиреНрдп ISO8601 рд╕реНрдЯреНрд░рд┐рдВрдЧ рд╕реЗ рдЕрд╡рдзрд┐ рдмрдирд╛рдиреЗ рдХрд╛ рдкреНрд░рдпрд╛рд╕ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдЙрджрд╛рд╣рд░рдг:

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

рдЗрд╕рдХреА рддрд░рд╣ рдХрд╖реНрдЯрдкреНрд░рдж рдЗрдореЛред рдФрд░ Duration рдСрдмреНрдЬреЗрдХреНрдЯреНрд╕ рдкрд░ isValid() рдлрд╝рдВрдХреНрд╢рди рдХреЗ рдЙрджреНрджреЗрд╢реНрдп рдХреЛ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рд░рд╛ рджреЗрддрд╛ рд╣реИ (рдХреНрдпрд╛ рдРрд╕рд╛ рдХреЛрдИ рдорд╛рдорд▓рд╛ рднреА рд╣реИ, рдЬрдм isValid() false рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдкрд▓ рдПрдХ рдЕрдорд╛рдиреНрдп рднреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддрд╛ рд╣реИ рдЗрдирдкреБрдЯ?)

@robbiecloset рдЕрдкрдбреЗрдЯ рдЕрдкреНрд░реИрд▓ рдореЗрдВ рдореЗрд░реА рдЖрдЦрд┐рд░реА рдкреЛрд╕реНрдЯ рдХреЗ рдмрд╛рдж рд╕реЗ рд╣реИ, "рдбреЗрдЯ-рдПрдлрдПрдирдПрд╕" рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╕рдордп рдХреНрд╖реЗрддреНрд░ рд╕рдорд░реНрдерди рдкрд░ рдмреЗрд╣рддрд░ рд╣реЛ рдЧрдпрд╛ рд╣реИред рдЗрд╕рдореЗрдВ рдорджрдж рдХреЗ рд▓рд┐рдП рдЕрдм "date-fns-timezone" рдФрд░ "date-fns-tz" рдкреНрд░реЛрдЬреЗрдХреНрдЯ рд╣реИрдВред

рдпрджрд┐ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдВрдЧрд╛ред

рдореИрдВ moment.duration(value).toISOString() === value рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рд╡рд╣ рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

рдореИрдВ рдХреНрд╖рдг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВред рдЕрд╡рдзрд┐ (рдорд╛рди)ред toISOString() === рдорд╛рди, рд╡рд╣ рдорд╛рди рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рд╕реЗ рдкрдврд╝рд╛ рдЬрд╛рддрд╛ рд╣реИред

@ рдмреЛрд░реНрд╕-рд▓рд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдпрд╣ рд╣реИ рдХрд┐ рдкрд▓ рджреЛ рдорд╛рдиреЛрдВ рдХреЛ рдбреАрдХреЛрдб рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдорд╛рди рдПрдиреНрдХреЛрдбреЗрдб рдорд╛рди рдЙрддреНрдкрдиреНрди рдХрд░рддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: moment.duration('PT0M0S').toISOString() === moment.duration('PT0S').toISOString() ред

рдпрджрд┐ рдЖрдк рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рджреЗрдЦрддреЗ рд╣реИрдВ, рддреЛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЕрдорд╛рдиреНрдп рдорд╛рди рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡рд┐рдирд┐рд░реНрджреЗрд╢ рд╕реЗ рдЕрд▓рдЧ рд╣реИрдВ:

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

рдкреИрдЯрд░реНрди рдЬреЛ рдЖрдИрдПрд╕рдУ рдЕрд╡рдзрд┐ рдорд╛рдирдХ рд╕реЗ рдореЗрд▓ рдирд╣реАрдВ рдЦрд╛рддреЗ рд╣реИрдВ рдЙрдирдХрд╛ рдкрд░реАрдХреНрд╖рдг "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 рд░реЗрдЯрд┐рдВрдЧреНрд╕