javascript - Formatează momentul ca șir


Am o valoare moment transmisă unei funcții și încerc să formatez momentul într-un șir de caractere în formatul YYYY-MM-DD HH:mm (SS-ISO 8601). Data este formatată corect, dar valoarea orei este omisă.

Cod :

timeTransformer(value: moment.Moment) {
    return value == null ? null : value.format('YYYY-MM-DD HH:mm'); //Time is 00:00 even though I can see that moment has values 15:37:19
}

Răspuns #1

Conform documentației:

Ca atare, valorile lui _d și orice alte proprietăți prefixate cu _ nu ar trebui utilizate în niciun scop.

Spunând asta, putem explica ce se întâmplă. În cazul tău, putem vedea că atât _i cât și _f sunt setate. _i pare să fie folosit pentru a stoca valoarea inițială pe care ai transmis-o lui moment. _f pare să stocheze formatul pe care i-ai spus lui moment să îl folosească pentru a analiza inputul. Vezi aici:

var m = moment('2017/10/04 12:34:56', 'YYYY/MM/DD');
console.log(m._i);
console.log(m._f);
console.log(m.format('YYYY-MM-DD HH:mm'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.19.1/moment.min.js"></script>

Proprietatea _i este setată în același mod, dar logarea .format('YYYY-MM-DD HH:mm') arată același 00:00 pe care îl vezi. Acest lucru se datorează faptului că i-am spus lui moment să îl parseze ca YYYY/MM/DD - tu ai folosit YYYY-MM-DD.

Pentru a face ca timpul să funcționeze, trebuie să mergi și să modifici codul care creează obiectul tău moment.