2017-01-09 1 views
0

Я отлаживал это на некоторое время сейчас и до сих пор не смог понять это. Посмотрите, как время в _d отличается от времени в _i. Зачем?Почему moment.js дает разные результаты при назначении переменной?

var date = new Date('Fri, 06 Jan 2017 21:30:00 -0000') 
const momentDate = moment(date) 
console.log(`momentDate: `, momentDate); 
console.log(`moment(date): `, moment(date)); 

enter image description here

+1

Одна из точек создающего Moment .js заключалась в том, что синтаксический анализ строк с использованием конструктора 'Date' - это плохая идея (tm). Вместо этого используйте 'moment (string, format)', где 'format' указывает, как библиотека должна анализировать' string'. –

+1

Возможный дубликат внутреннего объекта [momentjs: «\ _d» vs «\ _i»] (http://stackoverflow.com/questions/28126529/momentjs-internal-object-what-is-d-vs-i) –

+0

@MikeMcCaughan Я действительно начал с этого, но я получил те же результаты. [CODE/OUTPUT] (http://imgur.com/a/BHxFk) –

ответ

0

Так что причина проблемы был у меня был среагировать компонент, который был перезапись значения startOf('day'). Если вы используете момент, чтобы преобразовать все ваши строковые даты, поступающие в ваше приложение, в моментальные объекты, если у вас возникли ошибки, обязательно посмотрите в своем компоненте, а не только на функции массажа convertToMoment для вызовов API.

Что еще более важно, до момента 3.0, все объекты момент не изменчивы, так что если вы делаете:

var a = moment() 
var b = a.startOf('day') 
console.log(a.format('LLL')) // January 22, 2017 12:00 AM 
console.log(b.format('LLL')) // January 22, 2017 12:00 AM 

Единственный способ исправить это либо:

// use the cool `frozen-moment` package (which is basically a polyfill) 
var a = moment().freeze() 
var b = a.startOf('day') 
console.log(a.format('LLL')) // January 22, 2017 2:17 AM 
console.log(b.format('LLL')) // January 22, 2017 12:00 AM 

// or type `.clone()` everytime you want to use a cool function 
var a = moment() 
var b = a.clone().startOf('day') 
console.log(a.format('LLL')) // January 22, 2017 2:17 AM 
console.log(b.format('LLL')) // January 22, 2017 12:00 AM