2013-03-14 4 views
13

В чем разница между использованием new Date() и new Date().getTime() при вычитании двух временных меток? (test script on jsFiddle)Дата() vs Date(). GetTime()

Оба следующих дает те же результаты:

var prev1 = new Date(); 
setTimeout(function() { 
    var curr1 = new Date(); 
    var diff1 = curr1 - prev1; 
}, 500); 

var prev2 = new Date().getTime(); 
setTimeout(function() { 
    var curr2 = new Date().getTime(); 
    var diff2 = curr2 - prev2; 
}, 500); 

есть причина, я должен предпочесть один над другим?

+0

Без разницы AFAIK 'new Date()' будет возвращать время в ms при создании экземпляра. – elclanrs

+0

duplicate: http://stackoverflow.com/questions/12517359/just-sytnax-date-now-vs-date-gettime – Moe

+1

@Moe Я спрашиваю 'new Date()' vs 'new Date(). GetTime() ', а не' Date.now() '. – Antony

ответ

45

Я понимаю, что это не в ваших вопросах, но вы можете рассмотреть Date.now(), который является самым быстрым, потому что вам не нужно создавать новый объект Date, видим следующее для сравнения различных версий: http://jsperf.com/date-now-vs-new-date-gettime/8

выше ссылка показывает использование new Date() быстрее, чем (new Date()).getTime(), но Date.now() быстрее всех.

Поддержка браузера для Date.now() даже не так уж плохо (IE9 +):

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Date/now

+0

По какой-то причине jsperf показывает, что '(new Date()). GetTime()' быстрее, чем '+ new Date();' любая идея почему? –

4

при создании нового Date() объекта он автоматически инициализируется к текущему времени.

От W3Schools:

new Date() // current date and time 
new Date(milliseconds) //milliseconds since 1970/01/01 
new Date(dateString) 
new Date(year, month, day, hours, minutes, seconds, milliseconds) 

Функция GetTime() просто возвращает это время.

От W3Schools:

Date.getTime() // method returns the number of milliseconds between midnight of January 1, 1970 and the specified date. 

http://www.w3schools.com/jsref/jsref_obj_date.asp

+0

Я не уверен, что мое понимание чтения выключено или вы не объясняете 'getTime()' правильно. Похоже, вы говорите, что значение getTime() будет меняться между временем, когда создается объект 'Date', когда при вызове функции. Это не то, что вы имели в виду, не так ли? –

+0

это было, но я был неправ ... Я исправил ответ –

3

Дата арифметика преобразует даты в Epoch времени (миллисекунды с 1 января 1970 года), поэтому функционально два фрагмента кода одинаковы.

Как это работает быстрее, ответ Джамунда Фергюсона правильный.

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