Дата () против даты (). GetTime ()

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

Оба следующих результата дают одинаковые результаты:

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);

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


person Antony    schedule 14.03.2013    source источник
comment
Никакой разницы AFAIK new Date() не вернет время в мс при создании экземпляра.   -  person elclanrs    schedule 14.03.2013
comment
дубликат: stackoverflow.com/questions /12517359/   -  person Moe    schedule 14.03.2013
comment
@Moe Я спрашиваю new Date() против new Date().getTime(), а не Date.now().   -  person Antony    schedule 14.03.2013


Ответы (3)


Я понимаю, что это не было в ваших вопросах, но вы можете рассмотреть 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

person Jamund Ferguson    schedule 14.03.2013
comment
По какой-то причине jsperf показывает, что (new Date()).getTime() быстрее, чем + new Date(); есть идеи, почему? - person Yaroslav Yakovlev; 10.02.2014

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

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

person scott.korin    schedule 14.03.2013

когда вы создаете новый объект 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

person Ben Glasser    schedule 14.03.2013
comment
Я не уверен, то ли у меня плохо с пониманием прочитанного, то ли вы неправильно объясняете getTime(). Похоже, вы говорите, что значение getTime() изменится между моментом создания объекта Date и моментом вызова функции. Вы не это имели в виду, не так ли? - person scott.korin; 14.03.2013