2014-02-11 5 views
1

У меня есть следующий код, который использует moment.js:Почему местное время не отличается от UTC в moment.js?

var Now = moment(); 
var UTC = moment().utc(); 

if (moment().isBefore(UTC)){ 
    $("#was").html("Time difference : " + Now.from(UTC)).fadeIn('fast'); 
} else { 
    $("#was").html("Time difference : " + UTC.fromNow()).fadeIn('fast'); 
} 

Результат является всегда: «Несколько секунд назад». Можете ли вы сказать мне, что я делаю неправильно?

+0

Ваша последняя фраза относится к отдельному вопросу. – Oerd

+0

@Oerd, спасибо. – Ishana

ответ

3

Хотя Now и UTC будут отображаться по-разному, они являются одним и тем же «моментом времени». Чтобы понять это, вы должны понять, как работает moment.js. Вот некоторые info from the official moment.js documentation (курсив мой):

По умолчанию момент разбирает и отображает местное время.

Если вы хотите, чтобы разбор или отображение момента времени в UTC, вы можете использовать moment.utc() вместо момента().

Так что разница в разборе и отображении. Внутри, объекты с моментом имеют одну и ту же метку времени. Небольшой тест, чтобы продемонстрировать это, чтобы добавить (и запустить) followin после кода:

console.log(Now.valueOf()); 
console.log(UTC.valueOf()); 
console.log(Now.valueOf() - UTC.valueOf()); // will be "a few secods" at most ;) 

Update: Если ваше намерение было создать момент, скажем, 5 часов назад, то:

var hours_ago = 5; 
var earlier = moment().subtract('hours', hours_ago); // 5 hours ago 
var earlier_yet = moment().subtract({'days': 2, 'hours': 3}) // 2 days, 3 hours ago 
+0

Тогда то же самое произошло бы, если бы мы использовали разницу между зоной («+ 00:00») и зоной («+ 05:00») ... Есть ли работа вокруг этого, чтобы показать реальную разницу? – Ishana

+0

«var ago_5h = moment(). Subtract ('hours', 5);' покрывает ваши потребности? – Oerd

+0

Я постараюсь посмотреть, что я могу придумать, но спасибо за объяснение того, как работает момент, который фактически решает большую часть моей проблемы. – Ishana

Смежные вопросы