Moment: рдлрд╝реЙрд▓рдмреИрдХ рдХреЗ рдмрд┐рдирд╛ рдкрд╛рд░реНрд╕ рдорд╛рди

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

moment(value) рд▓рд┐рдП рдПрдХ рдордирдорд╛рдирд╛ рдорд╛рди рдкрд╛рд╕ рдХрд░рдиреЗ рд╕реЗ #1407 рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдПрдХ рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рдЪреЗрддрд╛рд╡рдиреА рдЙрддреНрдкрдиреНрди рд╣реЛрддреА рд╣реИред

рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдЗрд╕ рдкрд╛рд░реНрд╕рд┐рдВрдЧ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдерд╛ рд▓реЗрдХрд┐рди рджрд┐рдирд╛рдВрдХ рдирд┐рд░реНрдорд╛рддрд╛ рдкрд░ рд╡рд╛рдкрд╕ рдЖрдП рдмрд┐рдирд╛ред рдЕрдм рддрдХ рдореИрдВрдиреЗ рдЬреЛ рдПрдХрдорд╛рддреНрд░ рддрд░реАрдХрд╛ рдкрд╛рдпрд╛ рд╣реИ рд╡рд╣ рдХрд╛рдлреА рдмреЗрдХрд╛рд░ рд╣реИ:

if (moment.isDate(value)) {
    return moment(value);
} else {
    return moment(value, moment.ISO_8601);
}

рдФрд░ рдлрд┐рд░ рднреА рдпрд╣ рдЕрднреА рднреА ASP.net /Date(1198908717056)/ рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЛ рдкрд╛рд░реНрд╕ рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

рджреЛ-рддрд░реНрдХ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдЦреНрдд рд╡рд┐рдХрд▓реНрдк рдХреЛ рдЕрдиреБрдорддрд┐ рджреЗрдирд╛ рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╡рд┐рдХрд▓реНрдк рд╣реЛрдЧрд╛: moment(value, true) ред

рдзрдиреНрдпрд╡рд╛рджред

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

@SystemParadox рдпрджрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реИ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рдерд╛ рдФрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдШрд╛рдпрд▓ рд╣реЛ рдЧрдпрд╛:

function disableNativeDateFallback(config) {
    config._d = new Date(parseFloat('NaN')); // an invalid date
}
function makeMomentWrapper(momentFn) {
    return function() {
        var prevFallback = moment.createFromInputFallback;
        moment.createFromInputFallback = disableNativeDateFallback;
        var result = momentFn.apply(null, arguments);
        moment.createFromInputFallback = prevFallback;
        return result;
    }
};
var momentStrict = makeMomentWrapper(moment);
momentStrict.utc = makeMomentWrapper(moment.utc);

рд╡реЗ createFromInputFallback рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрджрд▓рдХрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЕрдиреНрдп рдХреЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ momentStrict рдФрд░ momentStrict.utc рдХреЗ рдмрдЬрд╛рдп moment рдФрд░ moment.utc рдФрд░ рдмрд╛рдХреА рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рд╣реИ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред

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

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

рд╣рд╛рдВ, рдореИрдВ рдЙрди рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдкрд╛рд░реНрд╕ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ moment() рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЕрдЧрд░ рд╡реЗ рд╕рднреА рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рддреЗ рд╣реИрдВ, рддреЛ рдЪреЗрддрд╛рд╡рдиреА рдХреЛ рдкреНрд░рд┐рдВрдЯ рдХрд░рдиреЗ рдФрд░ Date рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп, рдореИрдВ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдПрдХ рдЕрдорд╛рдиреНрдп рддрд┐рдерд┐ рдЙрддреНрдкрдиреНрди рдХрд░реЗред

рдореИрдВ moment рднрд╡рд┐рд╖реНрдп рдХреЗ рд╕рдВрд╕реНрдХрд░рдг рдХреЗ рд╡реНрдпрд╡рд╣рд╛рд░ рдореЗрдВ рдкрд╣рд▓реЗ рд╕реЗ рдСрдкреНрдЯ-рдЗрди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ, рдЬрд╣рд╛рдВ рдкрджрд╛рд╡рдирдд Date рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдлрд╝реЙрд▓рдмреИрдХ рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╣рдЯрд╛ рджрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред

рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рд╕рдЦреНрдд рдореЛрдб рд╕реЗ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рдХреНрдпрд╛ рдЖрдкрдХрд╛ рдорддрд▓рдм moment(value, 'YYYY-MM-DD') рдЬреИрд╕реЗ рд╕рдЯреАрдХ рдкреНрд░рд╛рд░реВрдк рдХреЛ рдкрд╛рд░рд┐рдд рдХрд░рддреЗ рд╕рдордп рд╣реИ? рдпрджрд┐ рдРрд╕рд╛ рд╣реИ, рддреЛ рдпрд╣ рдорджрдж рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ 1. рдпрд╣ рдирд┐рд╖реЗрдзрд╛рддреНрдордХ рд░реВрдк рд╕реЗ рд╡рд░реНрдмреЛрдЬрд╝ рд╣реИ рдФрд░ 2. рдЗрд╕рдореЗрдВ рдЕрднреА рднреА рд╕рднреА рдкреНрд░рд╛рд░реВрдк рд╢рд╛рдорд┐рд▓ рдирд╣реАрдВ рд╣реИрдВ рдЬреЛ moment(value) Date рдХрдВрд╕реНрдЯреНрд░рдХреНрдЯрд░ рдХреЗ рд▓рд┐рдП рд░рд┐рд╕реЙрд░реНрдЯ рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдкрд╛рд░реНрд╕ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред

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

рдЪреВрдВрдХрд┐ moment(String) рджреНрд╡рд╛рд░рд╛ рд╕реАрдзреЗ рд╕рдорд░реНрдерд┐рдд рдкреНрд░рд╛рд░реВрдк рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд╕реВрдЪреАрдмрджреНрдз рд╣реИрдВ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╕рдЦреНрдд рдореЛрдб рдХреЗ рд╕рдорд╛рди рд╣реА рдорд╛рдирдирд╛ тАЛтАЛтАЛтАЛрд╕реНрд╡реАрдХрд╛рд░реНрдп рд╣реЛрдЧрд╛ред рджреВрд╕рд░реЗ рд╢рдмреНрджреЛрдВ рдореЗрдВ, moment(String, Boolean) рдЬреЛрдбрд╝рдирд╛ред

рд╣рд╛рдБ рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реЛрдЧрд╛ред рдзрдиреНрдпрд╡рд╛рджред

@SystemParadox рд╣рд╛рдБ, рдЖрдк рдЬреЛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рд╡рд╣ рд╕рдорд░реНрдерд┐рдд рд╣реИред рдЖрдк рдмрд╕ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░реЗрдВ moment.createFromInputFallback(config) :

moment.createFromInputFallback = function (config) {
    config._d = new Date(NaN);
}

рдореИрдВ рдорд╛рдирддрд╛ рд╣реВрдВ рдХрд┐ рдпрд╣ рдорд╛рдореВрд▓реА рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рд╕рдВрднрд╡ рд╣реИ ;-)

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

рдХреНрдпрд╛ рд╣реЛрдЧрд╛ рдпрджрд┐ рдореИрдВ рдПрдХ рд╕рдордп рдореЗрдВ рдПрдХ рдХреЛрдбрдмреЗрд╕ рдПрдХ рдХреЙрд▓ рдХреЛ рдЙрддреНрддрд░реЛрддреНрддрд░ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ?

рд╣рдо рдХреЗрд╡рд▓ moment(String, true) рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреНрдпреЛрдВ рдирд╣реАрдВ рдЬреЛрдбрд╝ рд╕рдХрддреЗ?

рдлрд┐рд░ рд╕реЗ рдЦреЛрд▓рдирд╛, рдЬрдмрдХрд┐ рд╡рд░реНрдХрдЕрд░рд╛рдЙрдВрдб рд╣реИ, рдЗрд╕реЗ рд╕рд╛рд░реНрд╡рдЬрдирд┐рдХ рдПрдкреАрдЖрдИ рдореЗрдВ рд░рдЦрдиреЗ рд╕реЗ рдХрдИ рддрд░рд╣ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдореЗрдВ рдорджрдж рдорд┐рд▓реЗрдЧреАред #2535 рдкрд░ рднреА рд╡рд┐рдЪрд╛рд░ рдХрд░реЗрдВ, рдХреЗрд╡рд▓ рдмрд┐рд▓реНрдб-рдЗрди рд╕реНрд╡рд░реВрдкреЛрдВ рдХреЗ рдЖрд╕рдкрд╛рд╕ рд╕рддреНрдпрд╛рдкрди рдХреЗ рд▓рд┐рдП рдХрд╣реЗрдВред

рдХреНрдпрд╛ рдЬрд░реВрд░рдд рд╣реИ рдкрд▓ред JS_DATE рд╕реНрдерд┐рд░, рдЗрд╕рдХрд╛ рдорддрд▓рдм рд╣реИ рдХрд┐ рдмрд╕ рдЗрдирдкреБрдЯ рдХреЛ new Date , https://github.com/moment/moment/issues/1686 рджреЗрдЦреЗрдВред рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдирд╛ред

@SystemParadox рдпрджрд┐ рдпрд╣ рдорджрджрдЧрд╛рд░ рд╣реИ, рддреЛ рдореЗрд░реЗ рдкрд╛рд╕ рдЖрдкрдХреЗ рд╕рд╛рде рднреА рдРрд╕рд╛ рд╣реА рдореБрджреНрджрд╛ рдерд╛ рдФрд░ рдореИрдВ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд░реИрдкрд░ рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдиреЗ рдореЗрдВ рдШрд╛рдпрд▓ рд╣реЛ рдЧрдпрд╛:

function disableNativeDateFallback(config) {
    config._d = new Date(parseFloat('NaN')); // an invalid date
}
function makeMomentWrapper(momentFn) {
    return function() {
        var prevFallback = moment.createFromInputFallback;
        moment.createFromInputFallback = disableNativeDateFallback;
        var result = momentFn.apply(null, arguments);
        moment.createFromInputFallback = prevFallback;
        return result;
    }
};
var momentStrict = makeMomentWrapper(moment);
momentStrict.utc = makeMomentWrapper(moment.utc);

рд╡реЗ createFromInputFallback рд╕рдВрдХреНрд╖реЗрдк рдореЗрдВ рдмрджрд▓рдХрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдлрд┐рд░ рдЕрдиреНрдп рдХреЛрдб рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рд▓реМрдЯрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдЗрд╕реЗ рдкреБрдирд░реНрд╕реНрдерд╛рдкрд┐рдд рдХрд░рддреЗ рд╣реИрдВред рдХрд┐рд╕реА рднреА рдХреЛрдб рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рдорд╛рдЗрдЧреНрд░реЗрдЯ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИрдВ momentStrict рдФрд░ momentStrict.utc рдХреЗ рдмрдЬрд╛рдп moment рдФрд░ moment.utc рдФрд░ рдмрд╛рдХреА рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рдпрд╣ рд╣реИ рд░рд╣ рд╕рдХрддреЗ рд╣реИрдВред

рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕