рдореИрдВ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдХреНрд╖рдгрд┐рдХрд╛рдПрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдбреЗрдЯ рд╣реЗрд░рдлреЗрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реИ рдЗрд╕рд▓рд┐рдП рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рджред
рдЖрдкрдХреЛ рдПрдХ рдЙрджрд╛рд╣рд░рдг рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рд╣рд╡рд╛рдИ рдЬрд╣рд╛рдЬ рдХреЗ рдЯрд┐рдХрдЯ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд▓реЛрдЧреЛрдВ рдХреА рджреБрдХрд╛рди рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВред duration.humanize()
рдлрд╝рдВрдХреНрд╢рди рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдЗрдВрдкреНрд░реЗрд╕ рдХрд░рдиреЗ рдХрд╛ рддрд░реАрдХрд╛ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдЬрдм 12:00 рдкрд░ рдирд┐рдХрд▓рддреЗ рд╣реИрдВ рдФрд░ 13:30 рдкрд░ рдЙрддрд░рддреЗ рд╣реИрдВред рдпрд╣ рдЗрд╕реЗ 2 рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рд░рд╛рдЙрдВрдб рдХрд░реЗрдЧрд╛ред рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рдХреА рдЧреНрд░реИрдиреНрдпреБрд▓реИрд░рд┐рдЯреА рдХреА рдЬрд░реВрд░рдд рд╣реИ, рдЬреЛ рдкрд▓-рдкрд▓ рдЧрд╛рдпрдм рд╣реИред
рдЙрдЪреНрдЪрддрдо рдореВрд▓реНрдп рд╕реЗ рд╢реБрд░реВ рд╣реЛрдиреЗ рд╡рд╛рд▓реЗ 1 рд╕реНрддрд░ рддрдХ рдорд╛рдирд╡реАрдХрд░рдг рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
// 1:30
duration.humanize()
2 hour
duration.humanize({precision: 2})
1 hour 30 minutes
duration.humanize({precision: 3})
1 hour 30 minutes 0 seconds
рджреВрд╕рд░реА рд╕рдорд╕реНрдпрд╛ рддрдм рд╣реЛрддреА рд╣реИ рдЬрдм рд╕рдВрдЦреНрдпрд╛ 0. рд╣реЛрддреА рд╣реИред рдореЛрдореЗрдВрдЯреЗрдЬ рдЗрд╕рдХрд╛ "рдХреБрдЫ рд╕реЗрдХрдВрдб" рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХреИрд╕реЗ рд╣рд╛рд╕рд┐рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдлреЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред
// 3 days and 0 minutes
duration.format('D [and] M')
> 3 days and 0 minutes
duration.format('H [and] M')
> 72 hours and 0 minutes
duration.format('H [and] m')
> 72 hours and few minutes
рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЙрдЪреНрдЪрддрдо рдореВрд▓реНрдп рдХреЛ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдореИрдк рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рдпрджрд┐ 1 рд╡рд░реНрд╖ рднреА рд╣реИ, рддреЛ рдкреНрд░рд╛рд░реВрдк рд╣рдореЗрдВ рдмрддрд╛рддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рд╣реА рддрд░реАрдХреЗ рд╕реЗ рдХреИрд╕реЗ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПред рдореИрдВ рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдиреЗ рдкрд░ рдЦреБрд╢реА рдордирд╛рдКрдВрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЙрдкрдпреЛрдЧреА рд╣реИ рдФрд░ рдЬрдм рд╣рд╛рде рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдерд╛рдиреАрдпрдХрд░рдг рдХреЛ рдЦрд░рд╛рдм рдорд╣рд╕реВрд╕ рдХрд░рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рд╣рд╛рде рд╕реЗ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдЗрд╕ рдЕрдиреБрд░реЛрдз рдкрд░ +1
@llacroix , рдХреНрдпрд╛ рдЖрдк рдЗрд╕рдХреЗ рд▓рд┐рдП рдкреБрд▓ рдЕрдиреБрд░реЛрдз рд▓рд┐рдЦрдиреЗ рдореЗрдВ рд░реБрдЪрд┐ рд▓реЗрдВрдЧреЗ?
рд╣рд╛рдБ рд╢рд╛рдпрдж, рдореИрдВ рдЙрд╕рдХреЗ рд▓рд┐рдП рд╕рдордп рдирд┐рдХрд╛рд▓рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реВрдБрдЧрд╛ред рдЗрд╕реЗ рдХреНрд╖рдгреЛрдВ рдореЗрдВ рдЬреЛрдбрд╝рдирд╛ рд╕рдВрднрд╡рддрдГ рд▓рдВрдмреЗ рд╕рдордп рдореЗрдВ рдЦреБрдж рдХреЛ рдФрд░ рджреВрд╕рд░реЛрдВ рдХреЗ рд╕рдордп рдХреЛ рдмрдЪрд╛рдПрдЧрд╛ред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдпрд╣ рдореБрдЭреЗ рд╣рд░ рдЬрдЧрд╣ рдХрд┐рд╕реА рди рдХрд┐рд╕реА рддрд░рд╣ рдХреА рдЧрдВрджрдЧреА рдкреИрджрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдордЬрдмреВрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдпрд╣ рд╕рд╣реА рдирд╣реАрдВ рд╣реИред рдХреНрд╖рдгреЛрдВ рдХреЛ рдареАрдХ рдХрд░рдирд╛ рдЕрдзрд┐рдХ рдЙрдЪрд┐рдд рд▓рдЧрддрд╛ рд╣реИред
рд▓реЗрдХрд┐рди рд╣рдореЗрдВ рд╢рд╛рдпрдж рдереЛрдбрд╝рд╛ рдФрд░ рдЪрд░реНрдЪрд╛ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рдХрд┐ рдХрд┐рд╕ рддрд░рд╣ рдХрд╛ рдкреНрд░рд╛рд░реВрдк рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, 0 рдорд╛рди рдкреНрд░рджрд░реНрд╢рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдирд╣реАрдВред
4 hours 20 seconds
рдпрд╛ 0 days 4 hours 0 minutes 20 seconds
рдорд╣реАрдиреЗ 30 рджрд┐рди, рдПрдХ рд╕рд╛рд▓ 365 рд╣реЛрдВрдЧреЗред
рдФрд░ рд╡рд░реНрд╖, рдорд╣реАрдиреЗ, рд╕рдкреНрддрд╛рд╣, рджрд┐рди, рдорд┐рдирдЯ, рджреВрд╕рд░реЗ рдФрд░ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдЕрдиреНрдп рдХреМрди рд╕реЗ рдкреНрд░рд╛рд░реВрдк рдореМрдЬреВрдж рд╣реЛрдиреЗ рдЪрд╛рд╣рд┐рдПред
рдЗрд╕рдХреЗ рд▓рд┐рдП +1
рд▓реЗрдХрд┐рди рд╣рд╛рдБ, рд╕реНрд╡рд░реВрдкрдг рдпрд╣рд╛рдБ рдПрдХ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╕рдорд╕реНрдпрд╛ рд╣реИред рдорд╛рдирд╡реАрдХрд░рдг рдФрд░ рдкреНрд░рд╛рд░реВрдк рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рджреЛрдиреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдорд╛рдирд╡реАрдп рд╡реНрдпрд╡рд╣рд╛рд░ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕реБрдЭрд╛рд╡:
// 1:30
duration.humanize ();
1 рдШрдВрдЯрд╛ 30 рдорд┐рдирдЯ
рдЕрд╡рдзрд┐ред рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ ({рджреМрд░: "рдШрдВрдЯреЗ"})
2 рдШрдВрдЯреЗ
рдЕрд╡рдзрд┐ред рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ ({рджреМрд░: "рдорд┐рдирдЯ"})
1 рдШрдВрдЯрд╛ 30 рдорд┐рдирдЯ
рдЕрд╡рдзрд┐.рд╕рдорд░рдг ({рджреМрд░: "рд╕реЗрдХрдВрдб"})
1 рдШрдВрдЯрд╛ 30 рдорд┐рдирдЯ 0 рд╕реЗрдХрдВрдб
рдпрджрд┐ рдЧреЛрд▓ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдЪреНрдЪрддрдо рдПрдХрддрд╛ рдЬрд┐рд╕рдХрд╛ рдореВрд▓реНрдп рд╢реВрдиреНрдп рд╣реИ рдФрд░ рдЗрд╕рд╕реЗ рдЫреЛрдЯреА рд╕рднреА рдЗрдХрд╛рдЗрдпрд╛рдВ рдЫреЛрдбрд╝реА рдЬрд╛рдиреА рдЪрд╛рд╣рд┐рдПред
// 1 рдШрдВрдЯрд╛ 0 рдорд┐рдирдЯ 45 рд╕реЗрдХрдВрдб
рдЕрд╡рдзрд┐.рдорд╛рди () -> 1 рдШрдВрдЯрд╛
// 1 рдШрдВрдЯрд╛ 1 рдорд┐рдирдЯ 0 рд╕реЗрдХрдВрдб
рдЕрд╡рдзрд┐ред рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ () -> 1 рдШрдВрдЯрд╛ рдФрд░ 1 рдорд┐рдирдЯ
// 1 рдШрдВрдЯрд╛ 1 рдорд┐рдирдЯ 10 рд╕реЗрдХрдВрдб
рдЕрд╡рдзрд┐ред рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░реЗрдВ () -> 1 рдШрдВрдЯрд╛ 1 рдорд┐рдирдЯ рдФрд░ 10 рд╕реЗрдХрдВрдб
рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, "рдФрд░" рд╡рд┐рднрд╛рдЬрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдВрддрд┐рдо рдЬреБрдбрд╝рд╛рд╡ рдХреЗ рд▓рд┐рдП рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреЛ рд╡реНрд╣рд╛рдЯреНрд╕рдПрдк рджреНрд╡рд╛рд░рд╛ рдкреВрд░реНрд╡рд╡рд░реНрддреА рд╣реИ
2 рдорд╣реАрдиреЗ 6 рджрд┐рди 7 рдШрдВрдЯреЗ рдФрд░ 36 рдорд┐рдирдЯ
рдпрд╣ рдореИрдВ рдХреИрд╕реЗ рдХрд▓реНрдкрдирд╛ рдХрд░рддрд╛ рд╣реВрдВ рдХрд┐ рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП
рдпрд╣рд╛рдБ рд╣рд╕реНрддрд╛рдХреНрд╖рд░ рдФрд░ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдХреЗ рд▓рд┐рдП рдореЗрд░рд╛ рд╕реБрдЭрд╛рд╡ рд╣реИред
var duration = moment.duration({
hours : 1,
minutes : 0,
seconds : 20,
milliseconds : 0
});
duration.countdown(); // 1 hour 0 minutes 20 seconds
duration.countdown(1); // 1 hour
duration.countdown(2); // 1 hour and 0 minutes
duration.countdown(3); // 1 hour 0 minutes and 20 seconds
рдЬреИрд╕рд╛ рдХрд┐ @sylvainpolletvillard рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд╣реИ, рд╣рдо рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред рд╢рд╛рдпрдж рдРрд╕рд╛ рдХреБрдЫ рд╣реЛред
duration.countdown(3); // 1 hour 0 minutes and 1 second
duration.countdown(3, true); // 1 hour
рд╣рдо moment.fromNow(Boolean)
рдЬреИрд╕реЗ рдкреНрд░рддреНрдпрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░ рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
duration.countdown(3); // 1 hour 0 minutes and 1 second ago
duration.countdown(3, null, true); // 1 hour ago
рд╣рдо рдЗрд╕реЗ рдЕрдВрдЧреНрд░реЗрдЬреА рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣рдж рддрдХ рдЖрд╕рд╛рдиреА рд╕реЗ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╕рднреА рдЕрд▓рдЧ-рдЕрд▓рдЧ рднрд╛рд╖рд╛рдУрдВ рдореЗрдВ рдЗрди рд╕рднреА рддрд╛рд░реЛрдВ рдХреЛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЬреЛрдбрд╝рдирд╛ рдмрд╣реБрдд рдореБрд╢реНрдХрд┐рд▓ рд╣реЛрдЧрд╛ред
рд╣рдореЗрдВ рд╢рд╛рдпрдж рдЦреБрдж рдХреЛ рддрд╛рд░-рддрд╛рд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдХреЙрд▓рдмреИрдХ рдмрдирд╛рдиреЗ рд╣реЛрдВрдЧреЗред рдпреЗ рдирд┐рдпрдо рд╢рд╛рдпрдж рдмрд╣реБрдд рдЬрдЯрд┐рд▓ рд╣реЛрдВрдЧреЗ (рдореИрдВ рдЖрдкрдХреЛ рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ, рдкреЙрд▓ )ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрди рдореВрд▓реНрдпреЛрдВ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рддрд░реАрдХрд╛ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдЬреИрд╕рд╛ рд╣реЛрдЧрд╛ред
var keys = [ "h", "mm", "s"],
values = [ 1, 0, 20],
strings = ["1 hour", "0 minutes", "20 seconds"];
lang.countdown(keys, values, strings, addSuffix);
рддрдм рдЕрдВрдЧреНрд░реЗрдЬреА рдЕрдиреБрд╡рд╛рдж рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╣реЛрдЧрд╛:
lang.countdown = function (keys, values, strings, addSuffix) {
var i, output = "";
for (i = 0; i < strings.length; i++) {
if (i === strings.length - 1 && strings.length > 1) {
output += "and ";
}
output += strings[i] + " ";
}
if (addSuffix) {
output += "ago";
}
}
рд╕рднреА рдХреЗ рд╕рднреА, рдпрд╣ рдПрдХ рдЕрд╡рд┐рд╢реНрд╡рд╕рдиреАрдп рд░реВрдк рд╕реЗ рдЬрдЯрд┐рд▓ рдЬреЛрдбрд╝ рдмрди рдЬрд╛рддрд╛ рд╣реИ рдЬрд┐рд╕рдХреЗ рд▓рд┐рдП 33 рдЕрдиреБрд╡рд╛рдж рдХрд╛рд░реНрдпреЛрдВ рдФрд░ рдХреЛрд░ рдореЗрдВ рдПрдХ рдЕрдзрд┐рдХ рдХреЛрдб рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрддреА рд╣реИред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рддрдиреА рдмрд╛рд░ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛, рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рднреА рдХреЗ рд▓рд┐рдП рд╕рднреА рдмреНрд▓реЛрдЯ рдХреЛ рдЬреЛрдбрд╝ рд░рд╣рд╛ рд╣реИред
рд╢рд╛рдпрдж рдпрд╣ рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдПрдХ рдкреНрд▓рдЧрдЗрди рдореЗрдВ рд▓реЗ рдЬрд╛рдпрд╛ рдЬрд╛рдПрдЧрд╛?
рдЗрд╕ рдЕрд╡рдзрд┐ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдкрд░ рдЪрд░реНрдЪрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЬрд╛рдирд╛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдРрд╕рд╛ рдХреБрдЫ рд╕рдВрднрд╡ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ -
moment.duration(9483000).format('d h m s') // 1 day 2 hours 20 minutes 30 seconds
moment.duration(9483000).format('h m s') // 26 hours 20 minutes 30 seconds
//etc...
рд╢рд╛рдпрдж рдпрд╣ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рд╛рд░реВрдк рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдмреВрд▓рд┐рдпрди рдкреИрд░рд╛рдореАрдЯрд░ рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдХрд┐ рдХреНрдпрд╛ 0 рдорд╛рди рджрд┐рдЦрд╛рдП рдЧрдП рдереЗ рдпрд╛ рдирд╣реАрдВ?
рд╕реАрдПрд▓рдбреАрдЖрд░ рдореЗрдВ рдПрдХ рд╕реВрдЪреА рдкреНрд░рд╛рд░реВрдкрдг рдпреЛрдЬрдирд╛ рдФрд░ рдбреЗрдЯрд╛ рд╣реИ, рдЬреЛ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХреЛ рдЕрднреА рднреА рдХрд╕реНрдЯрдо рдХреЙрд▓рдмреИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА:
http://cldr.unicode.org/development/development-process/design-proposals/list-formatting
рдореИрдВ рдкреНрд░рд╛рд░реВрдк рд╕рдорд╛рд░реЛрд╣ рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рд╕реБрдВрджрд░ рд╣реВрдВред рдЪреВрдВрдХрд┐ рдХрдИ рднрд╛рд╖рд╛рдУрдВ рдХрд╛ рдЕрдиреБрд╡рд╛рдж рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдкреНрд░рд╛рд░реВрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдореЗрдВ рдХрд╛рдлреА рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмреЛрд▓реЛ рддреБрдореНрд╣реЗрдВ рдЪрд╛рд╣рд┐рдП
moment.duration(9483000).format('d h m s') // 1 day 2 hours 20 minutes and 30 seconds
// English => 'd h m [and] s' 1 day 2 hours 20 minutes and 30 seconds
// French => 'd, h, m [et] s' 1 jour, 2 heures, 20 minutes et 30 secondes
// Russian => 'd h m [╨╕] s' 1 ╨┤╨╡╨╜╤М 2 ╤З╨░╤Б╨░ 30 ╨╝╨╕╨╜╤Г╤В ╨╕ 30 ╤Б╨╡╨║╤Г╨╜╨┤
рд╡рд┐рд╢реЗрд╖ рдХреЙрд▓рдмреИрдХ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд╕рд┐рд░реНрдл рд╡рд┐рд╢реЗрд╖ рдкреНрд░рд╛рд░реВрдк рдХреЗ рддрд╛рд░ рд╣реИрдВред
рдкреНрд░рд╕реНрддрд╛рд╡рд┐рдд duration.countdown()
рдФрд░ duration.countdown(1)
рд╡рд┐рдзрд┐рдпрд╛рдВ рдмрд┐рд▓реНрдХреБрд▓ рд╡рд╣реА рд╣реИрдВ рдЬреЛ рдореИрдВ рдЦреЛрдЬ рд░рд╣рд╛ рд╣реВрдВ (рдпрд╛рдиреА рдЕрдм рдореИрдВ рдЕрдкрдиреЗ рдХреЛрдб рдореЗрдВ рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ)ред
рдЗрд╕ рдмреАрдЪ, рдЕрд╡рдзрд┐ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдХрд╛ рд╡рд┐рд╕реНрддрд╛рд░ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рддрд░реАрдХрд╛ рд╣реИ?
рдЕрд╡рдзрд┐ рдХрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк moment.duration.fn
moment.fn
ред
рдореИрдВ рдкрд┐рдЫрд▓реЗ рд╕рд╛рд▓ # 143 / # 192 рдкрд░ рдХреБрдЫ рдЗрд╕реА рддрд░рд╣ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдЯрд┐рдо рдиреЗ рдПрдХ рдкреНрд▓рдЧрдЗрди рдХрд╛ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛ рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рдЗрд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрднреА рд╕рдордп рдирд╣реАрдВ рд▓рд┐рдпрд╛ред
рдореИрдВ рдЕрдкрдирд╛ рдХрд╛рдо рд░рд┐рдмреВрдЯ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдерд╛ред рдореБрдЭреЗ рдирдИ рдЕрд╡рдзрд╛рд░рдгрд╛рдУрдВ рдЬреИрд╕реЗ рдХрд┐ рдЕрд╡рдзрд┐ рд╡рд╕реНрддреБрдУрдВ рдЖрджрд┐ рдХреЗ рд▓рд┐рдП рдЕрджреНрдпрддрди рдХрд░рдирд╛ рдерд╛ ... рдореИрдВ рдпрд╣ рдЯрд┐рдХрдЯ рдФрд░ рдЕрдиреНрдп рдереЗред рдЕрдм рдореИрдВ рдЬрд╛рдЧреАрд░ рдкрд░ рд╕рдВрдШрд░реНрд╖ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдФрд░ рдЕрднреА рднреА рдЗрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдпрджрд┐ рд╣рд╛рдВ рддреЛ рд╣рдореЗрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдХрд┐рд╕реА рдХреЗ рдЬреВрддреЛрдВ рдкрд░ рдХрджрдо рдирд╣реАрдВ рд░рдЦрдирд╛ рдЪрд╛рд╣рддрд╛, рдЗрд╕рд▓рд┐рдП рдЕрдЧрд░ рдореБрдЭреЗ рдорджрдж рдорд┐рд▓ рд╕рдХрддреА рд╣реИ рддреЛ рдореИрдВ рдЙрд╕рд╕реЗ рдорд┐рд▓реВрдВрдЧрд╛ред рдЕрднреА рдЙрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреМрди рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ?
рдореЗрд░рд╛ рдХреЛрдб рдирд┐рд░рдВрддрд░ рдЗрдХрд╛рдЗрдпреЛрдВ рдФрд░ рдЙрд╕ рдЬреИрд╕реА рдЧреИрд░-рдирд┐рд░рдВрддрд░ рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рдерд╛:
test.equal(moment([2012, 0, 1]).diff([2011, 0, 1], 'years\\y'), "1y");
test.equal(moment([2012, 0, 1]).diff([2011, 0, 1], 'months[m]'), "12m");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'months [months] days [days]'), "50 months 19 days");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'years \\y months \\M days \\d'), "4 y 2 M 19 d");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'years[y] days[d]'), "4y 80d");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'years [years] weeks [weeks]'), "4 years 11 weeks");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'years\\y weeks\\w [and] days [days]'), "4y 11w and 3 days");
test.equal(moment([2016, 0, 20]).diff([2011, 10, 1], 'days\\d'), "1541d");
рдпрд╣ рдЙрди рдЗрдХрд╛рдЗрдпреЛрдВ рдХреЛ рдирд╣реАрдВ рд╕рдВрднрд╛рд▓рддрд╛ рдерд╛ рдЬреЛ 'days years'
рдЬреИрд╕реЗ рдХреНрд░рдо рдореЗрдВ рдирд╣реАрдВ рдереЗред рдпрд╣ рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЛ рд╣рдЯрд╛рдиреЗ рдХрд╛ рдХрд╛рдо рднреА рдирд╣реАрдВ рдХрд░рддрд╛ рдерд╛ред
рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧ рд░рд╣рд╛ рд╣реИ, рдмрд┐рд▓реНрдХреБрд▓ рдЙрд╕реА рддрд░рд╣ рдХреА рдЪреАрдЬ рдЬрд┐рд╕рдХреА рдореБрдЭреЗ рдЙрдореНрдореАрдж рдереА!
рдпрд╣ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рд╕рднреА рдХреЗ рд▓рд┐рдП рдПрдХ рдЖрд╡рд╢реНрдпрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реИред
рдЗрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИ!
рдЖрдк рдореЗрдВ рд╕реЗ рдХреБрдЫ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдВрднрд╛рд╡рд┐рдд рд╕реНрдЯреЙрдкрдЧреИрдк рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рд╕рд░рд▓ рдкреНрд▓рдЧрдЗрди рдмрдирд╛рдпрд╛ рд╣реИ рдЬреЛ рдЖрдкрдХреЛ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рд╕реАрдзреЗ рдореЛрдореЗрдВрдЯ рд╕реЗ:
moment("1982-5-25").countdown().toString(); // => '30 years, 10 months, 14 days, 2 hours, 23 minutes, and 50 seconds'
рдпрд╣ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рдкрд╛рд╕ рдХрд┐рдП рдЧрдП рдХрд┐рд╕реА рднреА рдЙрд▓рдЯреА рдЧрд┐рдирддреА рд╡рд┐рдХрд▓реНрдкреЛрдВ рд╕реЗ рдЧреБрдЬрд░рддрд╛ рд╣реИ, рдЬреИрд╕реЗ рдХрд┐ рдХреНрдпрд╛ рдЗрдХрд╛рдЗрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реИ рдФрд░ рдХрд┐рддрдиреА рд╕рдЯреАрдХрддрд╛ рдХреЗ рд╕рд╛рде (рдЖрдк рдХрд╛рдЙрдВрдЯрдбрд╛рдЙрди рдбреЙрдХреНрд╕ рдХреЛ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ)ред рд╡реИрд╕реЗ рднреА, рдкреНрд▓рдЧрдЗрди рдпрд╣рд╛рдБ рд╣реИ: https://github.com/icambron/moment-countdown
@icambron рдЖрдкрдХреЗ рдХрд╛рдЙрдВрдЯреНрд░реАрдмреНрдпреВрдЯрди рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдпрд╣ рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реИ!
рдореИрдВрдиреЗ рдЕрднреА-рдЕрднреА рдХреНрд╖рдгреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рд╣реИред рдЬреЗрдПрд╕ рдФрд░ рдмрд╣реБрдд рдЬрд▓реНрджреА рдЗрд╕ рд╕рдЯреАрдХ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛ред рдпрд╣ рд╡рд╣ рдХреЛрдб рд╣реИ рдЬрд┐рд╕реЗ рдореИрдВрдиреЗ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ:
moment.duration.fn.format = function (input) {
var output = input;
var milliseconds = this.asMilliseconds();
var totalMilliseconds = 0;
var replaceRegexps = {
years: /Y(?!Y)/g,
months: /M(?!M)/g,
weeks: /W(?!W)/g,
days: /D(?!D)/g,
hours: /H(?!H)/g,
minutes: /m(?!m)/g,
seconds: /s(?!s)/g,
milliseconds: /S(?!S)/g
}
var matchRegexps = {
years: /Y/g,
months: /M/g,
weeks: /W/g,
days: /D/g,
hours: /H/g,
minutes: /m/g,
seconds: /s/g,
milliseconds: /S/g
}
for (var r in replaceRegexps) {
if (replaceRegexps[r].test(output)) {
var as = 'as'+r.charAt(0).toUpperCase() + r.slice(1);
var value = new String(Math.floor(moment.duration(milliseconds - totalMilliseconds)[as]()));
var replacements = output.match(matchRegexps[r]).length - value.length;
output = output.replace(replaceRegexps[r], value);
while (replacements > 0 && replaceRegexps[r].test(output)) {
output = output.replace(replaceRegexps[r], '0');
replacements--;
}
output = output.replace(matchRegexps[r], '');
var temp = {};
temp[r] = value;
totalMilliseconds += moment.duration(temp).asMilliseconds();
}
}
return output;
}
рдЗрд╕ рдХреЛрдб рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ:
d=moment.duration({hours:1,minutes:1,seconds:1});
d.format('HHH:mm:ss');
"001:01:01"
d=moment.duration({days:1, hours:1, minutes: 1});
d.format('H:mm:ss');
"25:01:00"
рд╕рдВрднрд╛рд╡рд┐рдд рд╕рдорд╕реНрдпрд╛рдПрдВ:
Math.floor(moment.duration(milliseconds)).asHours()
рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреЗ рд▓рд┐рдП +1
рд╡реНрдпрдХреНрддрд┐рдЧрдд рддреМрд░ рдкрд░ рдореИрдВ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪ .format()
рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдлреИрдВрд╕реА рдирд┐рдпрдореЛрдВ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рд╡рд┐рдзрд┐ .humanize()
рдпрд╛ рдПрдХ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП .countdown()
рд╡рд┐рдзрд┐ред 95% рдореБрджреНрджреЛрдВ рдХреЛ .format()
рд╕рд╛рде рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ .humanize()
рдХреЛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХрддрд╛ рдХреА рдкреЗрд╢рдХрд╢ рдХрд░рдиреА рдЪрд╛рд╣рд┐рдП рд▓реЗрдХрд┐рди рдпрд╣ рдПрдХ рдЕрд▓рдЧ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдлрд╝реЙрд░реНрдореЗрдЯрд┐рдВрдЧ рдЕрд╡рдзрд┐ рдПрдХ рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред рддреИрдпрд╛рд░ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдореЗрдВ рд╕реЗрдХрдВрдб рдХрд╛ рдЕрдиреБрд╡рд╛рдж рдХрд░рдирд╛ рдЖрд╕рд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдХрдареЛрд░ рдХреЛрдб рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░рддрд╛ рд╣реВрдВ рд▓реЗрдХрд┐рди:
d = moment.duration ({рджрд┐рди: 1, рдШрдВрдЯреЗ: 1, рдорд┐рдирдЯ: 1}); d.format ( 'DH: mm: ss');
"1 -215: 01: 00"
+1 format()
рдПрдХ usecase рдХреЗ рд░реВрдк рдореЗрдВ, рд╕рдордп рдкрд░реАрдХреНрд╖рд╛ (3 рдШрдВрдЯреЗ) рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХреА рдЬрд╛рдиреЗ рд╡рд╛рд▓реА Durations рдХреЛ hh: mm (: ss) рдпрд╛ рддреЛ рдХреЗ рд░реВрдк рдореЗрдВ рдЖрд╕рд╛рдиреА рд╕реЗ рд╕реНрд╡рд░реВрдкрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рдЬреЛ рдХрд┐ рдЗрддрдирд╛ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред рдЕрднреА, рдореЛрдореЗрдВрдЯ рдореЗрдВ рд╡реИрд╕рд╛ рд╣реА рдХрд░рдирд╛ рдХрд╛рдлреА рдХрдард┐рди рд╣реИ, рдЬрдм рддрдХ рдХрд┐ рдореИрдВ рд╡реИрдирд┐рд▓рд╛ рдЬреЗрдПрд╕ рдореЗрдВ рдбрдм рдирд╣реАрдВ рдХрд░реВрдВрдЧреА :)
+1 рдЕрд╡рдзрд┐ рдкреНрд░рд╛рд░реВрдк!
рдпрд╣рд╛рдБ рдПрдХ рддреНрд╡рд░рд┐рдд рд╕реБрдзрд╛рд░ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдореИрдВрдиреЗ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рд╣реИ:
moment.duration.fn.format = function(){
str = ""
if(this.days() > 1) str = str + Math.floor(this.days()) + "d "
if(this.hours() > 1) str = str + Math.floor(this.hours()) + "h "
if(this.minutes() > 1) str = str + Math.floor(this.minutes()) + "m "
if(this.seconds() > 1) str = str + Math.floor(this.seconds()) + "s "
return str
}
: +1: duration.format()
: +1: period.format () рдХреЗ рд▓рд┐рдП рднреА
рдЗрд╕ рдкреАрдЖрд░ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдХреНрдпрд╛ рдпрд╣ рджреВрд░ рд╣реИ?
рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП рджреВрд░ рд╣реЛ рдЧрдпрд╛ ... рд▓рдЧрднрдЧ рдПрдХ рд╕рд╛рд▓ рдЬреЛ рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдирд╛рдпрд╛ред рдореИ рдЙрд╕реЗ рдХрд░рдиреЗ рдХреА рдПрдХ рдХреЛрд╢рд┐рд╢ рддреЛ рдХрд░реВрдВрдЧрд╛ред рдореИрдВ рдкрд▓ рдкрд▓ js рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрджреНрдпрддрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЬреИрд╕реЗ рд╣реА рдореЗрд░реЗ рдкрд╛рд╕ рдкрд░реАрдХреНрд╖рдг / рд╕рдореАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╣реЛрдЧрд╛ред рдореБрдЭреЗ рджреЛ рджрд┐рдиреЛрдВ рдореЗрдВ рдПрдХ рдкрд░реАрдХреНрд╖рд╛ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рддреИрдпрд╛рд░ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдпрд╣ рд╕рдВрднрд╛рд╡рдирд╛ рдирд╣реАрдВ рд╣реИ рдХрд┐ рджреЛ рджрд┐рдиреЛрдВ рдХреЗ рднреАрддрд░ рдХреБрдЫ рджрд┐рдЦрд╛рдИ рджреЗрдЧрд╛ред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдБред
@llacroix рдзрдиреНрдпрд╡рд╛рдж :)
: +1: рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдПред рд╕реБрдзрд╛рд░ ()
рдХреНрд╖рдгред рдЕрд╡рдзрд┐ редfn.format = рдлрд╝рдВрдХреНрд╢рди (рд╢реВрдиреНрдп, рджреЛрдбрд┐рдЯ) { var рдШрдВрдЯреЗ = this.hours (), рдорд┐рдирдЯ = this.minutes (), рд╕реЗрдХрдВрдб = this.seconds (); var displayFormat = '', zerosFormat = twoDigit? '00': '0', рдкреИрдбрд▓реЗрдлреНрдЯ = рдЯреВрдбрд┐рдЬрд┐рдЯ? -2: -1; рдЕрдЧрд░ (рдШрдВрдЯреЗ || рд╢реВрдиреНрдп) { displayFormat + = (zerosFormat + hours) .slice (padLeft) + 'h'; } рдЕрдЧрд░ (рдорд┐рдирдЯ || рд╢реВрдиреНрдп) { displayFormat + = (zerosFormat + рдорд┐рдирдЯ) .slice (рдкреИрдбрд▓реЗрдлреНрдЯ) + 'рдорд┐рдирдЯ'; } рдЕрдЧрд░ (рд╕реЗрдХрдВрдб || рд╢реВрдиреНрдп) { DisplayFormat + = (zerosFormat + seconds) .slice (padLeft) + 's'; } рд╡рд╛рдкрд╕реА $ .trim (displayFormat); }
+1 рдЕрд╡рдзрд┐ рдкреНрд░рд╛рд░реВрдкред
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
рдореБрдЭреЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╡реНрдпрд╛рдкрдХ рдЕрд╡рдзрд┐ рдХреЗ рдкреНрд░рд╛рд░реВрдкрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдпрд╣рд╛рдВ рдФрд░ рд╕реНрдЯреИрдХрдСрд╡рд░рдлрд╝реНрд▓реЛ рдкрд░ рдереНрд░реЗрдбреНрд╕ рдХреА рд╕рдореАрдХреНрд╖рд╛ рдХреА рдФрд░ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрдЬ рдмреИрда рдЧрдпрд╛ред
рдореИрдВ рдЕрднреА рднреА рдПрдХ рдЫреЛрдЯреЗ рд╕реЗ рд╡рд┐рд╡рд░рдг рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдХреЛрд░ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдареЛрд╕ рд╣реЛрддрд╛ рд╣реИред рдореБрдЭреЗ рдЕрдЧрд▓реЗ рдХреБрдЫ рджрд┐рдиреЛрдВ рдореЗрдВ рдХреЛрдб рдФрд░ рдХрд▓реНрдкрдирд╛ рдФрд░ рдЙрджрд╛рд╣рд░рдг рдпрд╣рд╛рдВ рдорд┐рд▓реЗрдВрдЧреЗред рдореВрд▓ рд╡рд┐рдЪрд╛рд░ рдпрд╣ рд╣реИ рдХрд┐ рдЖрдкрдХреЗ рдкрд╛рд╕ рдХреЛрдИ рднреА рдордирдорд╛рдирд╛ рдЕрд╡рдзрд┐ рд╣реЛ рд╕рдХрддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЗ рд╕рд╛рде рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ рдХреНрд╖рдг рдкреНрд░рд╛рд░реВрдк рдкреНрд░рд╛рд░реВрдк рд╕реНрдЯреНрд░рд┐рдВрдЧ, рдЬреИрд╕реЗред period.format ("d [d] hh: mm: ss") -> 2d 03:47:24
рдЖрдк рдЕрдВрддрд┐рдо рдореВрд▓реНрдп рдкрд░ рдордирдорд╛рдиреА рджрд╢рдорд▓рд╡ рдкрд░рд┐рд╢реБрджреНрдзрддрд╛ рдХреЛ рднреА рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдЬреИрд╕реЗред period.format ("h [hrs]", 3) -> 42.384 hrs
рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП +1.рдлреЙрд░реНрдореЗрдЯ
рдореИрдВрдиреЗ рдЕрдкрдирд╛ рдХреНрд╖рдг рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рд╣реИред
https://github.com/jsmreese/moment-duration-format
рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЗ рдФрд░ рдХреБрдЫ рдЙрджрд╛рд╣рд░рдг рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╣реИрдВред
рдореЗрд░рд╛ рдкреНрд▓рдЧрдЗрди рд▓реЙрд╢ рдФрд░ рдЕрдВрдбрд░рд╕реНрдХреЛрд░.рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкрд░ рдирд┐рд░реНрднрд░ рд╣реИред
+1 рдЕрд╡рдзрд┐.рдлреЙрд░реНрдореЗрдЯ ()
рдпрд╣ рдЯрд┐рдХрдЯ рдЕрдм рд╕реЗ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рд╣реИред рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдХрднреА рднреА рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред
@ Maxwell2022 рдореИрдВрдиреЗ рдПрдХ рдкрд▓ рдкрд╣рд▓реЗ рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛ред рд╕реБрдзрд╛рд░ рдкреНрд▓рдЧрдЗрди рдПрдХ рд╣рдлреНрддреЗ рдкрд╣рд▓реЗ рдпрд╛ рддреЛ:
https://github.com/jsmreese/moment-duration-format
рдХреНрдпрд╛ рд╡рд╣ рдЖрдкрдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛?
рдЗрд╕рдХреЗ рд╕рд╛рде рд╣реА +1 рднреАред рдЕрдиреНрдпрдерд╛ рдПрдХ рд╡реНрдпрд╛рдкрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рдореЗрдВ рдмрд╣реБрдд рдзреНрдпрд╛рди рджреЗрдиреЗ рдпреЛрдЧреНрдп рдЪреВрдХ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред
https://github.com/rmm5t/jquery-timeago рдЗрд╕ рдмрд╛рдд рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрдЪреНрдЫрд╛ рдЦрд╛рдХрд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рдЗрд╕реЗ рдореЛрдореЗрдВрдЯ рдореЗрдВ рдХреИрд╕реЗ рд▓рд╛рдЧреВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ ...
@schmod рдореИрдВрдиреЗ рдкрд┐рдЫрд▓реЗ рдорд╣реАрдиреЗ рдПрдХ moment.duration.format рдкреНрд▓рдЧрдЗрди рдкреЛрд╕реНрдЯ рдХрд┐рдпрд╛ рдерд╛:
https://github.com/jsmreese/moment-duration-format
рдХреНрдпрд╛ рдпрд╣ рдЖрдкрдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?
: +1:!
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ (рд▓реЗрдХрд┐рди 24 рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рд╣реЛрдЧрд╛):
moment.duration.fn.format = function(format) {
return moment(this.as('milliseconds')).format(format);
}
@jsmreese рдЖрдкрдХрд╛ https://github.com/jsmreese/moment-duration-format LoDash рдкрд░ рдирд┐рд░реНрднрд░ рд╣реЛрдирд╛ рдПрдХ рд╡рд╛рд╕реНрддрд╡рд┐рдХ рд╢реЛрд╕реНрдЯреЙрдкрд░ рд╣реИред рд╣рдо рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рдЫреЛрдЯреА рд╕реА рд╕реБрд╡рд┐рдзрд╛ рдХреЗ рд▓рд┐рдП LoDash рдХреЗ рд▓рд┐рдП рдПрдХ рд╕реНрд╡рд┐рдЪ рдХрд╛ рдФрдЪрд┐рддреНрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддрд╛ред рдпрджрд┐ рдЖрдкрдХрд╛ рдкреНрд▓рдЧрдЗрди рджреЛрдиреЛрдВ рд╕реЗ рд╕реНрд╡рддрдВрддреНрд░ рдерд╛, рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реЗ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдпрд╣ рдЕрдзрд┐рдХ рд╡реНрдпрд╡рд╣рд╛рд░реНрдп рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛ред
@ рд╡реНрд╣реЗрд▓реНрдкрд░ рдмрд┐рд▓реНрдХреБрд▓ рд╕рд╣рдордд рд╣реИрдВред
рдореЗрд░рд╛ рд╡рд╛рддрд╛рд╡рд░рдг LoDash рдФрд░ Underscore.String рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдореИрдВрдиреЗ рдЙрди рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рд╕реЗ рд╡рд┐рдзрд┐рдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ - рдореБрдЭреЗ рдХреБрдЫ рдорд╣реАрдиреЗ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдкрд╣рд▓реЗ рд╕рдВрд╕реНрдХрд░рдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереА рдФрд░ рдмрд╕ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдФрд░ рд╡рд╣рд╛рдВ рд╕реЗ рдмрд╛рд╣рд░ рдирд┐рдХрд╛рд▓рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
рдореИрдВ рдЙрди рдЖрд╢реНрд░рд┐рддреЛрдВ рдХреЛ рд╢реАрдШреНрд░ рд╣реА рд╣рдЯрд╛ рджреВрдБрдЧрд╛ред
@ рд╕реНрд▓реАрдкрд░ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдФрд░ LoDash рдЗрдВрдЯрд░рдХрдореНрдкреИрдЯрд┐рдмрд▓ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рд╣реЛрддреЗ рд╣реИрдВред рдЬрдм рддрдХ @jsmreese LoDash рдХреЗ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдмрд┐рд▓реНрдб рдореЗрдВ рдХреБрдЫ рднреА рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рддрдм рддрдХ рдЖрдкрдХреЛ рдЙрд╕рдХреЗ рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЬреИрд╕реЗ рдХрд┐ рдмрд┐рдирд╛ рдХрд┐рд╕реА рдкрд░реЗрд╢рд╛рдиреА рдХреЗред
@ input8908 рдпрд╣ рдмрд╛рдд рд╣реИ, рдФрд░ @wleeper рд╕рд╣реА рд╣реИ - рдореИрдВ _am_ LoDash рдХреА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬреЛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдмрд┐рд▓реНрдб рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдирд╣реАрдВ рд╣реИрдВред
рдореИрдВрдиреЗ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рд╣реИред рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдХрдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдореИрдВ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рд╕рдВрдЧрддрддрд╛ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рд╣рд╛рд▓рд╛рдБрдХрд┐, рдкрд▓-рдЕрд╡рдзрд┐-рдкреНрд░рд╛рд░реВрдк рдкреНрд▓рдЧрдЗрди рдЗрди рд╕рдорд╕реНрдпрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХреЛ рд╣рд▓ рдХрд░рддрд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬреЛ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ (рдЬреЛ рдХрд┐, рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдмрд╣реБрдд рдЕрдзрд┐рдХ рдХрдард┐рди рд╣реИ)ред
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ # 1241 рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдкрд░ рдХрд╛рдо рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдорд╛рдирд╡-рдкрдврд╝рдиреЗ рдпреЛрдЧреНрдп рддрд┐рдерд┐рдпреЛрдВ, рддрд┐рдерд┐рдпреЛрдВ, рдФрд░ рд╕реНрдерд╛рдиреЛрдВ рдкрд░ рд╕реВрдЪрд┐рдпреЛрдВ рдХреЗ рдкреНрд░рддрд┐рдкрд╛рджрди рдХреЗ рд╕рдВрджрд░реНрдн рдореЗрдВ рдмрд╣реБрдд рд╕рд╛рд░реЗ рджрд░рд╡рд╛рдЬреЗ рдЦреЛрд▓реЗрдВрдЧреЗред formatDuration
рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╛рдлреА рддреБрдЪреНрдЫ рд╣реЛрдЧрд╛ рдпрджрд┐ рдкрд▓ рдореЗрдВ CLDR рднрд╛рд╖рд╛ рдбреЗрдЯрд╛ рддрдХ рдкрд╣реБрдВрдЪ рд╣реЛред
jQuery рдХрд╛ Globalize рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╕рдорд╛рди рдореБрджреНрджреЛрдВ рдореЗрдВ рд╕реЗ рдХрдИ рд╕реЗ рдирд┐рдкрдЯрдиреЗ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ, рдФрд░ рдЙрдирдХреЗ рд╕рд╛рде рд╕рд╣рдпреЛрдЧ рдХрд░рдирд╛ рддрд░реНрдХрд╕рдВрдЧрдд рд▓рдЧрддрд╛ рд╣реИред рдЯреНрд╡рд┐рдЯрд░ рдХреЗ рдкрд╛рд╕ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдмрд╣реБрдд рд╡реНрдпрд╛рдкрдХ рдкреБрд╕реНрддрдХрд╛рд▓рдп рд╣реИ рдЬреЛ рдЗрд╕ рддрд░рд╣ рдХреА рдмрд╣реБрдд рд╕рд╛рд░реА рдЪреАрдЬреЗрдВ рдХрд░рддрд╛ рд╣реИ ...
рдареАрдХ рд╣реИ, рдпрд╣рд╛рдБ CLDR рдХреЗ рд╢реАрд░реНрд╖ рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдпреЛрдЧреНрдп рдПрдкреАрдЖрдИ рд╣реИред рддреБрдо рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реЛ?
duration:human(bool) // future/past dep/indep
duration:human({
with(=min+max): 'hours'|'minutes'|'seconds',
min: 'hours',
max: 'days',
float: bool,
length: "long|short|narrow",
abs: bool
})
: +1: +1
: +1:
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1
+1
+1
рдХреБрдЫ рдХреЗ рд░рдирдЯрд╛рдЗрдо рдХреЛ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдРрд╕рд╛ рдХрд░рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗред
+1
https://github.com/jsmreese/moment-duration-format
рдкрд▓-рдЕрд╡рдзрд┐-рдкреНрд░рд╛рд░реВрдк рд╕рдВрд╕реНрдХрд░рдг 1.2.1 рдПрдирдкреАрдПрдо рдкрд░ рдкреНрд░рдХрд╛рд╢рд┐рдд рд╣реБрдЖ рд╣реИред
рдпрд╣ Node.js рдФрд░ Browser рджреЛрдиреЛрдВ рдореЗрдВ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИред
рдпрд╣ рд▓реЛ-рдбреИрд╢ рдпрд╛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЕрдм рджреЛрдиреЛрдВ рдХреЗ рд╕рд╛рде рдкрд░реАрдХреНрд╖рдг рдФрд░ рдХрд╛рд░реНрдпрд╛рддреНрдордХ рд╣реИред
рдореВрд▓ рдЕрдВрдбрд░рд╕реНрдХреЛрд░.рдЯреНрд░рд┐рдВрдЧ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
рдЬреИрд╕реЗ рд╣реА рд╡рд░реНрддрдорд╛рди рдмреЛрд╡рд░ рдкреИрдХреЗрдЬ рд░рдЬрд┐рд╕реНрдЯрд░ / рдЕрдкрдВрдЬреАрдХреГрдд рдореБрджреНрджреЛрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдореИрдВ рдЗрд╕ рд╕рдВрд╕реНрдХрд░рдг рдХреЛ рдмреЛрд╡рд░ рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд░ рджреВрдВрдЧрд╛ред
рдЕрд╡рдзрд┐ рдкреНрд░рд╛рд░реВрдк рдХреЗ рд▓рд┐рдП +1
рдкреБрд╕реНрддрдХрд╛рд▓рдп рдХрд╛ рдПрдХ рд╣рд┐рд╕реНрд╕рд╛ рдмрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЗрд╕реЗ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред
+1
+1
+1
: +1:
рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП +1.рдлреЙрд░реНрдореЗрдЯ ()
+1
рдУрд╣ рд╣рд╛рдБ, рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдЕрдЧреНрд░рдгреА рд╢реВрдиреНрдп рдорд╛рдиреЛрдВ рдХреЗ рд╕рд╛рде рдЖрдЙрдЯрдкреБрдЯ рдХреЗ рд▓рд┐рдП moment.duration(3, 'seconds').get('ss')
рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдХрдо рд╕реЗ рдХрдо рдЕрдВрджрд░ рд░рд╣реВрдВрдЧрд╛ред
рдЗрд╕ рдЕрдиреБрд░реЛрдз рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдЙрд╕ рдкрд░ рдкреНрд░рдЧрддрд┐ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреНрдпрд╛ рдорджрдж рдЪрд╛рд╣рд┐рдП?
@oncletom
рдпрд╣ рдореМрдЬреВрдж рд╣реИ: https://github.com/jsmreese/moment-duration-format/
рдФрд░ рдХреНрдпрд╛ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЕрдЧрд░ рдЖрдк рд▓реЛ-рдбреИрд╢ рдпрд╛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдкрд░ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рдмреБрд░рд╛ рдирд╣реАрдВ рдорд╛рдирддреЗ рд╣реИрдВред
рдХрд┐рд╕реА рджрд┐рди рдЬрд▓реНрдж рд╣реА рдореИрдВ рдЙрд╕ рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рджреВрд░ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рд╕рдордп рджреВрдВрдЧрд╛ ...
рдЖрд╢реНрдЪрд░реНрдп рд╣реБрдЖ рдХрд┐ https://github.com/jsmreese/moment-duration-format/ рдЬрдм humanize
рд╣реИ, рддреЛ stdlib рдореЗрдВ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХрдо рд╕реЗ рдХрдо рдЖрд╢реНрдЪрд░реНрдп рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд рдХрд╛ рдЙрд▓реНрд▓рдВрдШрди рд╣реЛрддрд╛ рд╣реИред рдмрд╣реБрдд рдХрдо рд╕реЗ рдХрдо, рдПрдХ рд╕рд╛рдзрд╛рд░рдг рд╕рдВрдЦреНрдпрд╛рддреНрдордХ рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рд╡рд╛рдкрд╕ рдЖрдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП:
moment.duration(123, "minutes").format();
// "2:03:00"
рдЕрднреА рдХреЗ рд▓рд┐рдП рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ:
moment.utc(moment.duration(300 * 1000).asMilliseconds()).format("HH:mm:ss.SSS")
// 00:05:00.000
рдХреНрд╖рдгреЛрдВ рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдХреЗ рд░реВрдк рдореЗрдВ рдЬрд▓реНрдж рд╣реА рдЗрд╕реЗ рджреЗрдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдВрдЧреЗред js
+1
+1
рд╕рдВрдмрдВрдзрд┐рдд рдиреЛрдЯ рдкрд░, duration.toString()
[Object object]
рд░рд┐рдЯрд░реНрди рдорд┐рд▓рддрд╛ рд╣реИред рдХреНрдпрд╛ рдпрд╣ humanize()
рдирд╣реАрдВ рд▓реМрдЯрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП?
+1 рдЗрд╕ рдкрд░ рдЕрдзрд┐рдХ рдирд┐рдпрдВрддреНрд░рдг рд░рдЦрдирд╛ рдкрд╕рдВрдж рдХрд░реЗрдЧрд╛ред
+1
рдмрд╕ рдореЛрдореЗрдВрдЯ рдбреНрдпреВрд░реЗрд╢рди рдкреНрд░рд╛рд░реВрдк 1.3.0 рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ, рдЬреЛ рд▓реЛ-рдбреИрд╢ рдпрд╛ рдЕрдВрдбрд░рд╕реНрдХреЛрд░ рдкрд░ рдкрд┐рдЫрд▓реА рдирд┐рд░реНрднрд░рддрд╛ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИред рдЕрдм рдХреЗрд╡рд▓ рдирд┐рд░реНрднрд░рддрд╛ Moment.js рд╣реА рд╣реИред
@jsmreese рдЕрдЪреНрдЫрд╛ рдЖрджрдореА! :рдмрд┐рдпрд░:
@ рдЬрдЬрд╝реАрд░реЗрд╕ рдХреВрд▓ред !
рдпрд╣ рдХреНрд╖рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред рдЦреБрдж рд╣реА, рдореБрдЭреЗ рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдорд╛рдирд╡реАрдХрд░рдг рд╕рдЯреАрдХрддрд╛ рдХреЗ рдмрд┐рдирд╛ рдЗрддрдирд╛ рдЙрдкрдпреЛрдЧреА рдирд╣реАрдВ рд╣реИ, рдореИрдВ 1 рдШрдВрдЯреЗ рдХреЗ рд▓рд┐рдП 30 рдШрдВрдЯреЗ рдФрд░ 30 рдорд┐рдирдЯ рдХреЗ рдЪрдХреНрдХрд░ рдХреНрдпреЛрдВ рд▓рдЧрд╛рдирд╛ рдЪрд╛рд╣реВрдВрдЧрд╛? .. рдЗрд╕рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЙрдкрдпреЛрдЧ рдорд╛рдорд▓рд╛ рдирд╣реАрдВ рд╣реИред
+1, jsmreese рджреНрд╡рд╛рд░рд╛ рдкреНрд▓рдЧрдЗрди рд╢рд╛рдирджрд╛рд░ рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рдЕрдЧрд░ рдпрд╣ рдХреНрд╖рдг рдХрд╛ рд╣рд┐рд╕реНрд╕рд╛ рд╣реЛрддрд╛ рддреЛ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ред jsред
+1ред рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрдВрджрд░ рдФрд░ рдмрд╛рд╣рд░ рдорд╛рдирд╡реАрдХреГрдд рд╣реЛрдиреА рдЪрд╛рд╣рд┐рдПред
рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП +1.рдлреЙрд░реНрдореЗрдЯ
@jsmreese рдиреЗ рдПрдХ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЕрдкрдиреЗ рдкреНрд▓рдЧрдЗрди рдХреЛ рдкреНрд░рдХрд╛рд╢рд┐рдд рдХрд┐рдпрд╛ рдерд╛, рдФрд░ рдпрд╣ рдореБрджреНрджрд╛ рджреЛ рд╕рд╛рд▓ рдкрд╣рд▓реЗ рдЦреЛрд▓рд╛ рдЧрдпрд╛ рдерд╛ред @timrwood @ichernev рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рдореБрдЦреНрдп рдХреНрд╖рдг рдореЗрдВ
+1
+1
: +1: period.format рдХреЗ рд▓рд┐рдП
+1
: +1:
+1
рдЗрд╕рдХреА рд╡рд░реНрддрдорд╛рди рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ?
рд╢рд╛рдпрдж рдЕрдиреБрдЪрд░ рд╣рдореЗрдВ резрежрежреж, рдпрд╛ рдирдП рд╕рд╛рд▓ рдХреА рдкреВрд░реНрд╡ рд╕рдВрдзреНрдпрд╛ рддрдХ рдкрд╣реБрдВрдЪрдиреЗ рддрдХ рдЗрдВрддрдЬрд╛рд░ рдХрд░ рд░рд╣рд╛ рд╣реИ? @icambron
@gkatsanos - рдореИрдВ рдореЛрдореЗрдВрдЯ (рдФрд░ рдореИрдВ рд╣рдореЗрд╢рд╛ рд╕рд┐рд░реНрдл рдПрдХ рд╕рд╣рд╛рдпрдХ рдерд╛) рдХреЛ рдмрдирд╛рдП рд░рдЦрдиреЗ рдореЗрдВ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореЗрд░реА рд╕рд┐рдлрд╛рд░рд┐рд╢ рдПрдХ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдпрд╛ рдЧрдпрд╛ рдЕрдиреБрд░реЛрдз рд╣реИред рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдХреЛрдИ рд╣реИ рдЬреЛ рдЗрд╕реЗ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреЛрдб рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
@icambron рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдПрдХ рдкреНрд▓рдЧрдЗрди рдХреЗ рд░реВрдк рдореЗрдВ рдореМрдЬреВрдж рд╣реИ .. рдФрд░ рдХреНрдпрд╛ рдХрд░рдирд╛ рд╣реИ?
рдХреМрди рдЕрдиреБрд░рдХреНрд╖рдХ btw рд╣реИ?
@icambron рдХреНрдпрд╛ рдЖрдк рдкреНрд▓рдЧрдЗрди рдХреЛ рдЗрдВрдЧрд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ?
рдФрд░ рдпрд╣ рдПрдХ рдмрд╣реБрдд рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдЖрдХрд╛рд░ рдХрд╛ рдкреНрд▓рдЧрдЗрди рд▓рдЧрддрд╛ рд╣реИред рддрдереНрдп рдпрд╣ рдкрд░ рдирд┐рд░реНрднрд░ рдХрд░рддрд╛ рд╣реИ рд╕рд┐рд╡рд╛рдп lodash
рдХреЗ рдмрдЬрд╛рдп underscore
, рд╡рд╣рд╛рдБ рдХрд┐рд╕реА рднреА рдЕрдиреНрдп рдЪреАрдЬреЗрдВ рд╣реИрдВ рдЬреЛ рдкреАрдЖрд░ рдХреЗ рд░реВрдк рдореЗрдВ рдпрд╣ рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░реЛрдХрдиреЗ рдХреЗ рд╣реИрдВ .. рд╕реЗ рдмрдВрджрд░рдЧрд╛рд╣ рд╣реЛ рд░рд╣рд╛ рд╣реИ lodash
рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП underscore
рдЙрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред / cc @jsmreese
@alexanderbeletsky @gkatsanos рдЕрд╕рд▓ рдореЗрдВ рдореИрдВ рд╣рдЯрд╛ рджрд┐рдпрд╛ lodash
рдпрд╛ underscore
рдирд┐рд░реНрднрд░рддрд╛ рдереЛрдбрд╝реА рджреЗрд░ рдкрд╣рд▓реЗред
Moment.js рдХреЛрд░ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рдХрд┐рдП рдЬрд╛ рд░рд╣реЗ рдореЗрд░реЗ рдкреНрд▓рдЧрдЗрди рдХреЗ рд▓рд┐рдП рдкреНрд░рдореБрдЦ рдмрд╛рдзрд╛рдУрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдкреВрд░реНрдг i18n рд╕рдорд░реНрдерди рдХреА рдХрдореА рд╣реИред
рдФрд░ рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдПрдХ рдмрдбрд╝реА рдЪрд┐рдВрддрд╛ рд╣реИ, рд╡реНрдпрдХреНрддрд┐рдЧрдд рд░реВрдк рд╕реЗред рд╕рдорд░реНрдерд┐рдд рдХрдИ рднрд╛рд╖рд╛рдПрдБ рдореЗрд░реЗ рд▓рд┐рдП рдмрд╣реБрдд рдмрдбрд╝реА рдмрд╛рдд рд╣реИрдВ, рдФрд░ рдореИрдВ рдРрд╕реА рд╕реНрдерд┐рддрд┐ рдореЗрдВ рдЖрдиреЗ рд╕реЗ рдирдлрд░рдд рдХрд░реВрдБрдЧрд╛ рдЬрд╣рд╛рдБ рдлрд╝реАрдЪрд░ A рдХрд┐рд╕реА рднреА рднрд╛рд╖рд╛ рдореЗрдВ рдХрд╛рдо рдХрд░рддрд╛ рд╣реЛ, рд▓реЗрдХрд┐рди рдлрд╝реАрдЪрд░ B рдХреЗрд╡рд▓ рдЕрдВрдЧреНрд░реЗрдЬрд╝реА рдореЗрдВ рд╣реИред
@jsmreese рд╢рд╛рдпрдж рдЕрдЧрд░ рдЖрдкрдХреА рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рдХреБрдЫ рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ, рддреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдХреНрдпрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ - рдореИрдВ рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП
@mattgrande @alexanderbeletsky рдкреНрд░рд╛рд░реВрдк рдЯреЛрдХрди рдЕрдиреБрдХреВрд▓рди рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рдФрд░ рдкреНрд░рд╛рд░реВрдк рдЯреЗрдореНрдкрд▓реЗрдЯ, рдордирдорд╛рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдХреЛрдИ рдореБрджреНрджрд╛ рдирд╣реАрдВ рд╣реИред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рд╛рд░реВрдк рдЯреЗрдореНрдкрд▓реЗрдЯ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рд╕реНрдерд╛рдиреАрдпрдХреГрдд рдирд╣реАрдВ рд╣реИрдВ, рдФрд░ рдЖрдк рджрд╢рдорд▓рд╡ рдмрд┐рдВрджреБ рдХреЛ рд╕реНрдерд╛рдиреАрдп рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдпрд╛ рдореВрд▓реНрдпреЛрдВ рдкрд░ рдХрд┐рд╕реА рднреА рдкреНрд░рдХрд╛рд░ рдХреА рд╕реНрдерд╛рдиреАрдпрдХреГрдд рд╕реНрд╡рд░реВрдкрдг рдЬреЛрдбрд╝ рд╕рдХрддреЗ рд╣реИрдВред рд╡рд╣ рд╕рдм рдореЗрд░реЗ рд╕рд┐рд░ рдХреЗ рдКрдкрд░ рд╕реЗ рдЧрд╛рдпрдм рд╣реИред
: +1:
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░!
sooo .... рд╡рд╛рдЯ рдЗрд╕ рдХреЗ рд╕рд╛рде рд╕реМрджрд╛ рд╣реИ?
рдмрд╕ рдХреБрдЫ рдмрд╛рддреЛрдВ рдкрд░ рдзреНрдпрд╛рди рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдЫреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣рд╛рдБ рдПрдХ рд▓рд╛рдЦ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреА рддрд░рд╣ рд╣реИрдВред рдореИрдВ рдЕрдиреБрдЪрд░ рдирд╣реАрдВ рд╣реВрдВ рдФрд░ рдЕрдм рдЗрд╕ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдореЗрдВ рд╕рдХреНрд░рд┐рдп рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореИрдВ рджреЛ рдЪреАрдЬреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рд╣реВрдВ:
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░!
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░ред рд╣рдорд╛рд░рд╛ рдорд╛рдорд▓рд╛ рдпрд╣ рд╣реИ рдХрд┐ рд╣рдо рдПрдХ рдРрд╕рд╛ рдХрд╛рд░реНрдп рдкреНрд░рджрд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдЬрд╣рд╛рдВ рдХреЛрдИ рд╡реНрдпрдХреНрддрд┐ рдХреБрдЫ рд╕реЗрдХрдВрдб рдФрд░ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рдЙрдиреНрд╣реЗрдВ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░реЗрдЧрд╛ред рдЕрднреА рд╣рдо рдЗрд╕реЗ moment.startof ("w") рдХреЗ рд╕рд╛рде рдХрд░ рд░рд╣реЗ рд╣реИрдВред рдЬреЛрдбрд╝реЗрдВ ("s", nrOfececonds) редformat (customFormatString);
рджреБрд░реНрднрд╛рдЧреНрдп рд╕реЗ рдЕрднреА рдкрд┐рдЫрд▓реЗ рд╕рдкреНрддрд╛рд╣ рд╣реА рдЗрд╕рдиреЗ рд╕реНрдЯрд╛рд░реНрдЯрдСрдл ("w") рдХреЗ рдмрд╛рдж рд╕реЗ рд░рд╡рд┐рд╡рд╛рд░ рдХреЛ рдПрдХ рддреНрд░реБрдЯрд┐ рдЙрддреНрдкрдиреНрди рдХреА рдФрд░ рд░рд╡рд┐рд╡рд╛рд░ рдХреЛ рджрд┐рди рдХреЗ рд╕рдордп рдХреА рдмрдЪрдд рдХрд╛ рд╕рдордп рдерд╛, рдЗрд╕рд▓рд┐рдП рд╣рдо рд╡рд╣рд╛рдВ рдПрдХ рдШрдВрдЯреЗ рд╕реЗ рдЧрд╛рдпрдм рдереЗред рдмреЗрд╢рдХ рд╣рдо рдпрд╣ рдЬрд╛рдБрдЪ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдХрд┐ isDSTShifted () рдХреЗ рд╕рд╛рде рд▓реЗрдХрд┐рди рдпрд╣ рдЕрднреА рднреА рдЗрд╕реЗ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЕрд╡рдзрд┐ рдХреЛ рдПрдХ рддрд╛рд░реАрдЦ рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдирд╣реАрдВ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1 duration.format
рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП +1.рдлреЙрд░реНрдореЗрдЯ
рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдХрд┐рд╕реА рдХреЛ рднреА рдмрдВрдж рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ + 1ing рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдзрд╛рдЧреЗ рдХреЛ рдкрдврд╝рддрд╛ рд╣реИ?
рдмреБрдз рдкрд░, рдЬреВрди 10, 2015, 08:30 SamFromDaUk рд╕реВрдЪрдирд╛рдПрдВ @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдЕрд╡рдзрд┐ рдХреЗ рд▓рд┐рдП +1.рдлреЙрд░реНрдореЗрдЯ
-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/moment/moment/issues/463#issuecomment -110751635
рдпрд╛, рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ?
рдЬреЙрд░реНрдЬ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬреЛ рд▓реЛрдЧ +1 рдЬреЛрдбрд╝ рд░рд╣реЗ рд╣реИрдВ рд╡реЗ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВ, рдФрд░
рдмрд╕ рдпреЗ рд╕реБрд╡рд┐рдзрд╛рдПрдБ рдЪрд╛рд╣рд┐рдПред
рдпрджрд┐ рд╕реВрдЪрдирд╛рдПрдБ рдЖрдкрдХреЛ рдкрд░реЗрд╢рд╛рди рдХрд░ рд░рд╣реА рд╣реИрдВ, рддреЛ рдЗрд╕ рд╕реЗ рд╕рджрд╕реНрдпрддрд╛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ
рдереНрд░реЗрдбред
11 рдЬреВрди 2015 00:07 рдХреЛ, "рдЬреЙрд░реНрдЬ рдХреИрдЯрд╕рдиреЛрд╕" рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com рдиреЗ рд▓рд┐рдЦрд╛:
рдпрд╛, рдЗрд╕реЗ рдареАрдХ рдХрд░реЗрдВ?
-
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ рдпрд╛ рдЗрд╕реЗ GitHub рдкрд░ рджреЗрдЦреЗрдВ
https://github.com/moment/moment/issues/463#issuecomment -110767322ред
рд╕рдВрдкреВрд░реНрдг рдХрд╛рд░рдг рдЧрд┐рддреБрдм рдореЗрдВ рдПрдХ рд╡реЛрдЯ рд╕реБрд╡рд┐рдзрд╛ рдирд╣реАрдВ рд╣реИ (рдореЗрд░реА рд╕рдордЭ рд╕реЗ) рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдЪрд░реНрдЪрд╛ рдХреЛ рд╣рддреЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рддрд╛ рд╣реИред
рдЖрдк рдЕрдкрдиреА рдЗрдЪреНрдЫрд╛ рд╕реЗ рдЕрд╕рд╣рдордд рд╣реЛ рд╕рдХрддреЗ рд╣реИрдВ, рдпрд╣ рдорджрджрдЧрд╛рд░ рдирд╣реАрдВ рд╣реИред рдпрджрд┐ рдЖрдк рдЗрд╕ рдмрд╛рдд рд╕реЗ рдЕрд╕рд╣рдордд рд╣реИрдВ, рддреЛ рдереНрд░реЗрдб рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝реЗрдВ рдФрд░ рдЕрдкрдиреА рджрд▓реАрд▓реЗрдВ рджреЗрдВ (рд╡рд┐рд╢реЗрд╖рдХрд░, рдХреЛрдИ рднреА рдирдИ рджрд▓реАрд▓реЗрдВ рдпрд╛ рдЖрдкрдХреЗ рджреНрд╡рд╛рд░рд╛ рд╕реЛрдЪрд╛ рдЧрдпрд╛ рдХреЛрдИ рднреА рдмрд┐рдВрджреБ рдЦрд░рд╛рдм рдорд╛рдирд╛ рдЧрдпрд╛ рд╣реИ)ред
рдореИрдВ рдЕрднреА рднреА рд╕рдмреНрд╕рдХреНрд░рд╛рдЗрдм рдХрд┐рдпрд╛ рд╣реБрдЖ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ _do_ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рджрд┐рд▓рдЪрд╕реНрдк рддрд░реНрдХ рджрд┐рдП рдЬрд╛рдиреЗ рдмрд╛рдХреА рд╣реИрдВ, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рд╕реБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдЯреАрдо рдХреЛ рдХреЗрд╡рд▓ рджрдмрд╛рд╡ рдореЗрдВ рдЭреБрдХрдирд╛ рдирд╣реАрдВ рдЪрд╛рд╣рд┐рдПред
рдореИрдВ рдЙрдкрд░реЛрдХреНрдд рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдкреНрд▓рдЧрдЗрди @icambron рдХреА рдкреБрд╖реНрдЯрд┐ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред
рдпрджрд┐ рдЖрдк рдореЗрд░реА рддрд░рд╣ рд╣реИрдВ, рддреЛ рдЖрдк рд╡реНрдпрд╛рдкрдХ рдЙрддреНрдкрд╛рджрди (рдЬреИрд╕реЗ рдЕрдореЗрдЬрд╝рди рдХреА рд╢рд┐рдкрд┐рдВрдЧ рдЙрд▓рдЯреА рдЧрд┐рдирддреА) рдХреЗ рд╕рд╛рде .fromNow()
рдЪрд╛рд╣рддреЗ рд╣реИрдВред рдпрд╣рд╛рдБ рд╣реИ рдХрд┐ рдХреИрд╕реЗ рдХрд░рдирд╛ рд╣реИ:
// include the plugin
var cutoffDate = moment().add(3, 'hours'); // some date in the future that we're counting down to
var now = moment();
var output = moment.duration(cutoffDate.diff(now)).format('h [hours] m [minutes] s [seconds]');
// "3 hours 0 minutes 0 seconds"
рд╣рд╛рдВ, рдореИрдВ рдЗрд╕реЗ рднреА рд╕реНрдкрд╖реНрдЯ рдХрд░ рджреВрдВрдЧрд╛ - moment.duration ()ред format () рдЗрд╕ рдкреНрд▓рдЧрдЗрди рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ: https://github.com/jsmreese/moment-duration-format
рдпрджрд┐ рдЖрдк рдЙрд▓реНрдХрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рддреЛ oaf:moment-duration-format
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдХрд╛рдо рдирд╣реАрдВ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореИрдВ рдкрд▓ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣рд╛ рд╣реВрдБред рджреЛ рд╕рдордп рдХреЗ рдмреАрдЪ .iff, рдЬреЛ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рд╕рдорд╕реНрдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ рдпрд╣ "рджреЛрдкрд╣рд░" рдФрд░ "рд╣реВрдБ" рдХреЗ рдмреАрдЪ рд╣реИ, рдХрд╣рддреЗ рд╣реИрдВ рдХрд┐ рдореИрдВ 9pm рдкрд░ рдпрд╛рддреНрд░рд╛ рдХрд░ рд░рд╣рд╛ рд╣реВрдБ рдФрд░ рд▓реИрдВрдбрд┐рдВрдЧ 2am, рдореБрдЭреЗ рд╕рдордп рдХреА рд╕рд╣реА рдорд╛рддреНрд░рд╛ рдорд┐рд▓рдиреА рдЪрд╛рд╣рд┐рдПред
@ Markj89 рдЖрдкрдХреЛ
+1
+1
+1
: +1:
рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЛ рдмрдВрдж рдХрд░рдиреЗ рдкрд░ +1ред рдкреНрд▓рдЧрдЗрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдПрдХ рдареЛрд╕ рд╕рдорд╛рдзрд╛рди рд╣реИред
+1
+1
+1 .format()
+1, рдЕрднреА рднреА 4 рд╕рд╛рд▓ рдмрд╛рдж рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИ? : рдбреА
+1
Btwред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдорд╛рдирд╡рдХреГрдд рдкреНрд░рд╛рд░реВрдк рдХреЛ рднреА рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдЬреИрд╕реЗ рдХрд┐ 7 days and 5 hours
рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЙрддрдирд╛ рдореБрд╢реНрдХрд┐рд▓ рдирд╣реАрдВ рд╣реИ ...
рдмрд╕ @jsmreese рдХреЗ рдкреНрд▓рдЧрдЗрди рдкрд░ рдЬреЛрд░ рджреЗрдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд╛рдо рдорд╣рд╛рди!
: +1:
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1 рдЕрд╡рдзрд┐ рдкреНрд░рд╛рд░реВрдк
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
: +1:
рдореИрдВ рдЗрд╕реЗ # 1048 рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рдмрдВрдж рдХрд░рдиреЗ рдЬрд╛ рд░рд╣рд╛ рд╣реВрдВред рдЗрд╕рдХрд╛ рдорддрд▓рдм рдпрд╣ рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╣рдо рдЪрд▓реЗ рдЧрдП рд╣реИрдВ, рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рд╕рд┐рд░реНрдл рджреЛ рдореБрджреНрджреЗ рд╣реИрдВ рдЬреЛ рдХрдИ рд╕рд╛рд▓ рдкреБрд░рд╛рдиреЗ рд╣реИрдВ рдФрд░ рджреЛрдиреЛрдВ 'рдЕрд╡рдзрд┐ рд╕реНрд╡рд░реВрдкрдг' рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрдмрд▓рддреЗ рд╣реИрдВред рдЕрдиреНрдп рд╡реНрдпрдХреНрддрд┐ рдЗрд╕реЗ рдФрд░ рдЕрдзрд┐рдХ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рд╕рдордЭрд╛рддрд╛ рд╣реИред
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1 рдЕрд╡рдзрд┐ред рд╕реБрдзрд╛рд░
+1
.LocaleData () рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕рдВрдмрдВрдзрд┐рдд рд╕рдордп (45, рд╕рдЪ, 'рдорд┐рдореА') рдФрд░ 45 рдорд┐рдирдЯ, рдФрд░ рдЗрд╕реА рддрд░рд╣ рдкреНрд░рд╛рдкреНрдд рдХрд░реЗрдВ;)
+1 рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрд╕ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╣реБрдд рдмрд╛рдд рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЕрднреА рддрдХ рдЗрд╕реЗ рд▓рд╛рдЧреВ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред рдЗрд╕ https://github.com/jsmreese/moment-duration-format рдХреЗ рд▓рд┐рдП рдЕрд▓рдЧ рдкреИрдХреЗрдЬ рд╣реИ
рдХрд┐рд╕реА рднреА рдкреНрд░рд╛рд░реВрдк рдореЗрдВ рдЕрд╡рдзрд┐ рдкреНрд░рджрд░реНрд╢рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдЕрд╡рдзрд┐ рдХреЛ рдПрдордПрд╕ рдФрд░ рдлрд┐рд░ рдХреНрд╖рдг рдореЗрдВ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░реЗрдВ:
moment(duration.as('milliseconds')).format('HH:mm:ss')
рдзрдиреНрдпрд╡рд╛рдж! рдХреНрдпрд╛ рдпрд╣ рдбреЙрдХреНрд╕ рдореЗрдВ рд╣реИ? рдореИрдВрдиреЗ рдЗрд╕реЗ рдирд╣реАрдВ рджреЗрдЦрд╛ ...
рдпрд╣ рдбреЙрдХреНрд╕ рдореЗрдВ рдирд╣реАрдВ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдпреВрдирд┐рдХ рдпреБрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдПрдХ рд╣реИрдХ рд╣реИ рдЬреЛ рдпреБрдЧ рдХреЗ рдмрд╛рдж рдХреЗ рд╕рдордп рдореЗрдВ рдПрдХ рдмрд┐рдВрджреБ рдХреЗ рд░реВрдк рдореЗрдВ рдорд┐рд▓реАрд╕реЗрдХрдВрдб рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣реИред рдЗрд╕ рдкреНрд░рдХрд╛рд░, рдпрд╣ рдЕрд▓рдЧ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдкрдХреА рдЕрд╡рдзрд┐ 24 рдШрдВрдЯреЗ рдпрд╛ рдЙрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╣реЛред
рдЗрд╕ рдХреЛрдб рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреБрдЫ рдмрд╛рддреЗрдВ:
Hh token рдПрдХ рдЯреЛрдХрди рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ AM / PM рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдЖрдкрдХреА рдЕрд╡рдзрд┐ рдХреЗрд╡рд▓ 12 рддрдХ рдЬрд╛рдПрдЧреА
рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк рдПрдХ рдПрдЪрдПрдЪ рдЯреЛрдХрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ 23 рддрдХ рдЬрд╛рдПрдЧрд╛, рддреЛ рдЖрдкрдХреА рдЕрд╡рдзрд┐ 23: 59: 59.999 рд╕реЗ рдЕрдзрд┐рдХ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдЪреАрдЬреЗрдВ рдЕрдЧрд▓реА рддрд┐рдерд┐ рдореЗрдВ рдкрд╛рд░ рд╣реЛ рдЬрд╛рдПрдВрдЧреА
рдЬреИрд╕рд╛ рдХрд┐ рдпрд╣ рдХреЛрдб рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ, рдпрд╣ рдХреЗрд╡рд▓ рдПрдХ рд╕рд░реНрд╡рд░ рдкрд░ рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬреЛ рдпреВрдЯреАрд╕реА рдореЗрдВ рд╣реИред рдПрдХ рдЕрд▓рдЧ рд╕рдордпрдХреНрд╖реЗрддреНрд░ рдореЗрдВ рдХреЛрдИ рднреА рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдЕрдкреНрд░рддреНрдпрд╛рд╢рд┐рдд рдкрд░рд┐рдгрд╛рдо рджреЗрдЧрд╛ред
рдпрджрд┐ рдЖрдк рдЗрд╕ рд╣реИрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рдЗрд╕реЗ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдП:
moment.utc(duration.as('milliseconds')).format('HH:mm:ss')
рд▓реЗрдХрд┐рди рдЬреИрд╕рд╛ рдХрд┐ рдореИрдВрдиреЗ рдмрддрд╛рдпрд╛, рдпрд╣ рдХреЗрд╡рд▓ рддрднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдЬрдм рдЖрдкрдХреА рдЕрд╡рдзрд┐ 24 рдШрдВрдЯреЗ рд╕реЗ рдХрдо рд╣реЛред рдЙрд╕ рдкрд░, рдЪреМрдХреЛрд░ 1 рдкрд░ рд╡рд╛рдкрд╕ред
рдзрдиреНрдпрд╡рд╛рджред рдЖрдЬ рдореБрдЭреЗ рдпрд╣ рдкрддрд╛ рд▓рдЧрд╛рдиреЗ рдореЗрдВ рдереЛрдбрд╝рд╛ рд╕рдордп рд▓рдЧрд╛ рдХрд┐ рдХреЛрдИ .minutes()
рд╕рд╛рде .seconds()
ред рдореБрдЭреЗ рдмреЗрд╡рдХреВрдл рдХрд╣реЗрдВ, рд▓реЗрдХрд┐рди рдпрд╣ рдбреЙрдХреНрд╕ рд╕реЗ рдореЗрд░реЗ рд▓рд┐рдП рд╕реНрдкрд╖реНрдЯ рдирд╣реАрдВ рдерд╛ рдХрд┐ .seconds()
рдФрд░ .asSeconds()
рдмреАрдЪ рдХрд╛ рдЕрдВрддрд░ рдХреНрдпрд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдЕрдм рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╣реИ! :)
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП: console.log(duration.minutes()+":"+duration.seconds());
рдореИрдВ рдЗрд╕ рд╡рд┐рдзрд┐ рдХреЗ рд╕рд╛рде рд░рд╣рдирд╛ рд╣реЛрдЧрд╛ред
@elasticsteve рдпрджрд┐ рдЖрдк рджрд╕ рд╕реЗ рдХрдо рд╣реИрдВ, рддреЛ рдЖрдк рд╢рд╛рдпрдж рд╕реЗрдХрдВрдб рдХреЗ рд╣рд┐рд╕реНрд╕реЗ рдореЗрдВ рдПрдХ рдЕрдЧреНрд░рдгреА рд╢реВрдиреНрдп рдЬреЛрдбрд╝рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред :рдЖрдБрдЦ рдорд╛рд░рдирд╛:
@butterflyhug @elasticsteve рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдореБрдЦреНрдп рдХрд╛рд░рдг рдореИрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ рдХрд┐ format
ред рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдпрд╣ рдПрдХ рд╕рд░рд▓ рдХрдо рд╕рдордп рдХрд╛рдЙрдВрдЯрд░ рд╣реИ рдЗрд╕рд▓рд┐рдП рдореЗрд░реА рдЬрд░реВрд░рддреЛрдВ рдХреЗ рд▓рд┐рдП @maggiepint рд╕рдорд╛рдзрд╛рди рдкрд░реНрдпрд╛рдкреНрдд рд╣реИред
moment.utc(duration.asMilliseconds()).format('HH:mm:ss')
@sagivo рдЕрдЪреНрдЫрд╛ рдмрд┐рдВрджреБ! рдЕрдм @maggiepint рд╕рдорд╛рдзрд╛рди рдЕрдзрд┐рдХ рдЖрдХрд░реНрд╖рдХ рд▓рдЧ рд░рд╣рд╛ рд╣реИред рдореЗрд░рд╛ рд╕рд░реНрд╡рд░ рд╡реИрд╕реЗ рднреА UTC рд╣реИред
рдпрдХреАрди рд╣реИ, рдореИрдВ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдпрд╣ рдорд┐рд▓рддрд╛ рд╣реИред рдореИрдВрдиреЗ рдЙрд╕ рд╣реИрдХ рдХреЛ рдкреНрд░реЛрдбрдХреНрд╢рди рдХреЛрдб рдореЗрдВ рднреА рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рд╣реИред рд▓реЗрдХрд┐рди рдореИрдВ рдЗрд╕реЗ рдПрдХ рд╕рд╛рдорд╛рдиреНрдп рд╕рдорд╛рдзрд╛рди (рдХреБрдЫ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛) рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╢рдВрд╕рд┐рдд рдирд╣реАрдВ рдХрд░реВрдВрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдмрд╣реБрдд рд╕рд╛рд░реА рд╕реНрдерд┐рддрд┐рдпрд╛рдВ рдРрд╕реА рд╣реИрдВ рдЬрд╣рд╛рдВ рдпрд╣ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред (рдЙрджрд╛ред рдирдХрд╛рд░рд╛рддреНрдордХ рдЕрд╡рдзрд┐ рдПрдХ рдФрд░ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╡рд┐рдлрд▓рддрд╛ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рд╕реНрдкрд╖реНрдЯ рдЙрд▓реНрд▓реЗрдЦ рдЕрднреА рддрдХ рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред)
+1
+1 рдЕрд╡рдзрд┐.рдлреЙрд░реНрдо () !!!!!!!!!
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
+1
рдЕрд╡рдзрд┐ рдХреЛ рдбреАрдмрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП +1 рдХрдард┐рди рд╣реИ
+1
рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:
var duration = moment().add(5, 'days') - moment().local();
var s = Math.floor( (duration/1000) % 60 );
var m = Math.floor( (duration/1000/60) % 60 );
var h = Math.floor( (duration/(1000*60*60)) % 24 );
var d = Math.floor( duration/(1000*60*60*24) );
return d + ' days ' + h + ' hours ' + m + ' minutes ' + s + ' seconds before the deadline.';
// 4 days 23 hours 59 minutes 59 seconds before the deadline.
рдПрдХ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЯреНрд╡рд┐рдЯрд░ @Toon_Ladyboy рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░реЗрдВ
рдЖрдк рдЖрд╕рд╛рдиреА рд╕реЗ рдХреБрдЫ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреИрд╕реЗ:
var duration = moment().add(5, 'days') - moment().local(); var s = Math.floor( (duration/1000) % 60 ); var m = Math.floor( (duration/1000/60) % 60 ); var h = Math.floor( (duration/(1000*60*60)) % 24 ); var d = Math.floor( duration/(1000*60*60*24) ); return d + ' days ' + h + ' hours ' + m + ' minutes ' + s + ' seconds before the deadline.'; // 4 days 23 hours 59 minutes 59 seconds before the deadline.
Uggly, рд▓реЗрдХрд┐рди рдкреНрд░рднрд╛рд╡реАред
2019, рдЕрднреА рднреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИред
рдорд╛рдирд╡реАрдХрд░рдг рдореЗрдВ рдПрдХ рд╕рд╛рдзрд╛рд░рдг рдкреИрд░рд╛рдореАрдЯрд░,ред humanize(precise: true)
, рдЬреЛ рд╕рднреА рдЧреЛрд▓рд╛рдИ рдХреЛ рджрд░рдХрд┐рдирд╛рд░ рдХрд░реЗрдЧрд╛, рдЬреЛ рд╕рднреА рдХреЛ рдЦреБрд╢ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдЧрд╛ред рдЗрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЧреЛрд▓рд╛рдИ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХрдард┐рди рд╣рд┐рд╕реНрд╕рд╛ рд╣реИред рдмрд╛рдХреА рдХреЗрд╡рд▓ рдПрдХ рдЕрд╡рдзрд┐ рдХреЛ рдкрд░рд┐рд╡рд░реНрддрд┐рдд рдХрд░рдирд╛ рд╣реИ рдЬреИрд╕реЗ рдкреНрд░рд╛рд░реВрдк () рдХреЗ рд╕рд╛рде рдХрд┐рдпрд╛ рдЧрдпрд╛ рдХреЛрдИ рдЕрдиреНрдп рд╕реНрд╡рд░реВрдкрдгред
рдПрдХ рдорд╣рд╛рди moment
рдкрджреНрдзрддрд┐ рд╣реИ, рдЬрд┐рд╕реЗ fromNow()
рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЗрд╕ рддрд░рд╣ рд╕реЗ рдЕрдЪреНрдЫреЗ рдорд╛рдирд╡ рдкрдардиреАрдп рд░реВрдк рдореЗрдВ рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕рдордп рд╕реЗ рд╕рдордп рд▓реМрдЯрд╛рдПрдЧрд╛:
moment('2019-04-30T07:30:53.000Z').fromNow() // an hour ago || a day ago || 10 days ago
рдпрд╛ рдпрджрд┐ рдЖрдк рдЪрд╛рд╣рддреЗ рд╣реИрдВ рдХрд┐ рджреЛ рд╡рд┐рд╢рд┐рд╖реНрдЯ рддрд┐рдерд┐рдпреЛрдВ рдХреЗ рдмреАрдЪ рдЖрдк рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХреЗрдВ:
var a = moment([2007, 0, 28]);
var b = moment([2007, 0, 29]);
a.from(b); // "a day ago"
рдбреЙрдХреНрд╕ рд╕реЗ рд▓рд┐рдпрд╛ рдЧрдпрд╛:
рдХреНрдпрд╛ рдЗрд╕реЗ рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ? рдпрд╣ рдмрд╣реБрдд рдмреБрдирд┐рдпрд╛рджреА рдХрд╛рд░реНрдпрдХреНрд╖рдорддрд╛ рд╣реИред
рдореЗрд░реЗ рдорд╛рдорд▓реЗ рдореЗрдВ рдореБрдЭреЗ рдПрдХ рдкреИрдХреЗрдЬ рдорд┐рд▓рд╛ рдЬрд┐рд╕рдиреЗ рдореЗрд░реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рд╣рд▓ рдХрд┐рдпрд╛:
https://github.com/EvanHahn/HumanizeDuration.js
рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧреА рд╣реЛред :)
рдЬреБрд▓рд╛рдИ 2019 рдФрд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред
рдЬреБрд▓рд╛рдИ 2019 рдФрд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред
рдЕрднреА рддрдХ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рджреЗрдЦрд╛!
npm install moment-duration-format
рд╕рд┐рддрдВрдмрд░ 2019 рдЕрднреА рднреА рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рд░реВрдк рд╕реЗ рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдпрд╛рдж рдХрд░рддрд╛ рд╣реИ
d.format('H:mm:ss');
"1:01:01"
рд╕рд╛рде рд╣реА рдХрд╛рдордирд╛ рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдЗрд╕рдХрд╛ рдпрд╣ рдлреАрдЪрд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ
d.format('D-H:mm:ss'); // existence of D will mod hours to 24
"999-23:59:59"
рдпрджрд┐ рдХреЛрдИ рдпрд╣ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдпрд╣ рдмрдВрдж рдХреНрдпреЛрдВ рд╣реИ: https://github.com/moment/moment/issues/463#issuecomment -228543000
рдпрд╣ рдХрд┐рд╕реА рднреА рддрд░рд╣ рд╕реЗ рдЖрджрд░реНрд╢ рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВрдиреЗ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рдХреЗ рд░реВрдк рдореЗрдВ рдХреБрдЫ рдРрд╕рд╛ рдХрд┐рдпрд╛ред рдореЗрд░реЗ рдкрд╛рд╕ рдирд┐рд╖реНрдХреНрд░рд┐рдпрддрд╛ рдХреЗ рдмрд╛рдж рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд▓реЙрдЧ рдЖрдЙрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдЙрд▓рдЯреА рдЧрд┐рдирддреА рдХреЗ рд╕рд╛рде duration
рд╡рд╕реНрддреБ рдереА, рдФрд░ рд╢реЗрд╖ рд╕рдордп рдХреЛ рдкреНрд░рд╛рд░реВрдкрд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рдерд╛ред
// What I did:
private getTimeString(duration: moment.Duration): string {
const time = moment()
.seconds(duration.seconds())
.minutes(duration.minutes());
return time.format('mm:ss');
}
// What I'd rather do (as many others have mentioned)...
private getTimeString(duration: moment.Duration): string {
return duration.format('mm:ss');
}
рдореЗрд░рд╛ рдПрдХ рдШрд┐рдиреМрдирд╛ рд╕рдорд╛рдзрд╛рди:
import moment from 'moment';
const formatInt = (int: number): string => {
if (int < 10) {
return `0${int}`;
}
return `${int}`;
};
export const formatDuration = (time: string): string => {
const seconds = moment.duration(time).seconds();
const minutes = moment.duration(time).minutes();
const hours = moment.duration(time).hours();
if (hours > 0) {
return `${formatInt(hours)}:${formatInt(minutes)}:${formatInt(seconds)}`;
}
if (minutes > 0) {
return `${formatInt(minutes)}:${formatInt(seconds)}`;
}
return `00:${formatInt(seconds)}`;
};
2020
рдореИрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд╡рд┐рдзрд┐ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ, рдпрд╣ рдХрд┐рд╕реА рдФрд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИ :)
function formatDuration(duration, format) {
const date = moment().startOf('day');
return date.add(duration).format(format);
}
(рдореИрдВ рдХреЗрд╡рд▓ 00:00 рдФрд░ 23:59 рдХреЗ рдмреАрдЪ рдЕрд╡рдзрд┐ рдХреЗ рдкреНрд░рд╛рд░реВрдкрдг рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реВрдВ)
рдЕрднреА рднреА рдЗрд╕рдХреА рдЬрд░реВрд░рдд рд╣реИ
рдЗрди 'рдЧреЗрдЯ' рд╕реЗ рдпреВ рдЯреВ рд╡рд╛рдВрдЯ рдХреЛ рдлреЙрд░реНрдореЗрдЯ рдХрд░рдиреЗ рдореЗрдВ рдорджрдж рдорд┐рд▓рддреА рд╣реИ:
duration.get('years')
duration.get('months')
duration.get('days')
duration.get('hours')
duration.get('minutes')
duration.get('seconds')
рдореИрдВ рдХрд┐рд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реВрдВ:
const formatDuration = ms => {
const days = Math.floor(ms / 8.64e7);
const msOnLastDay = ms - days * 8.64e7;
return (days < 10 ? "0" + days : days) + ":" + moment.utc(msOnLastDay).format("HH:mm:ss.SSS");
};
formatDuration(5)
"00:00:00:00.005"
formatDuration(500)
"00:00:00:00.500"
formatDuration(50000)
"00:00:00:50.000"
formatDuration(5000000)
"00:01:23:20.000"
formatDuration(500000000)
"05:18:53:20.000"
// for reference
JSON.stringify(moment.duration(500000000)._data, null, 2)
"{
"milliseconds": 0,
"seconds": 20,
"minutes": 53,
"hours": 18,
"days": 5,
"months": 0,
"years": 0
}"
рдЬреБрд▓рд╛рдИ 2019 рдФрд░ рдпрд╣ рд╕реБрд╡рд┐рдзрд╛ рдЕрднреА рднреА рдЙрдкрд▓рдмреНрдз рдирд╣реАрдВ рд╣реИред
рдЕрднреА рддрдХ рдпрд╣ рдХреЛрд╢рд┐рд╢ рдирд╣реАрдВ рдХреА рд╣реИ, рд▓реЗрдХрд┐рди рдореИрдВ рд╕рд┐рд░реНрдл рдпрд╣ рджреЗрдЦрд╛!
npm install moment-duration-format
рдпрд╣ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рдареАрдХ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ :)
рдЦреЗрд▓ рдЦрддреНрдо рд╣реБрдЖ :)
рдзрдиреНрдпрд╡рд╛рдж, рд╕рд░рд╛рд╣рдирд╛ рд╣реИ рдХрд┐ !!!
рдбреЗ: рдЕрд▓реЗрдХреНрд╕реЗрд╕реА рдорд╛рдХрд╕ рдиреЛрдЯрд┐рдлрд┐рдХреЗрд╢рди @github.com
рдПрдирд┐рд╡рд╛рдбреЛ: рд╕реЗрдХреНрд╕реНрдЯрд╛-рдлрд┐рд░рд╛, 9 рдбреЗ рдЖрдЙрдЯреБрдмреНрд░реЛ рдбреЗ 2020 11:03
рдкрд╛рд░рд╛: рдкрд▓ / рдкрд▓ рдкрд▓ @noreply.github.com
Cc: рдбрдЧрд▓рд╕ рдЕрдЧреБрдЗрд░ [email protected] ; рдХрдореЗрдВрдЯ рдХрд░реЗрдВ @noreply.github.com
Assunto: рдкреБрди: [рдкрд▓ / рдкрд▓] рдЕрд╡рдзрд┐ рд▓рд╛рдкрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ (# 463)
рдЦреЗрд▓ рдЦрддреНрдо рд╣реБрдЖ :)
-
рдЖрдк рдЗрд╕реЗ рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдХреНрдпреЛрдВрдХрд┐ рдЖрдкрдиреЗ рдЯрд┐рдкреНрдкрдгреА рдХреА рд╣реИред
рдЗрд╕ рдИрдореЗрд▓ рдХрд╛ рдЙрддреНрддрд░ рд╕реАрдзреЗ рджреЗрдВ, рдЗрд╕реЗ GitHub https://github.com/moment/moment/issues/463#issuecomment-706200427 рдкрд░ рдХрд░реЗрдВ https://github.com/notifications/unsubscribe-auth/AGD22DRNGNIQMOJFQQW7W3W3W3J3/3sJ3b3sJ3 рдкрд░ рджреЗрдЦреЗрдВ ред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
2019, рдЕрднреА рднреА рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреА рдЬрд░реВрд░рдд рд╣реИред