Velvet Star Monitor

Standout celebrity highlights with iconic style.

news

date = new Date(); date.valueOf() vs Date.now()

Writer Andrew Mclaughlin

I am getting started with JavaScript. I consulted my colleague on how to get the current time.

He told me with this code:

> date = new Date()
> date.valueOf()

But most people do it this way:

> Date.now()

The second method is simpler and more readable.

If I want to convince my colleague to use the second one, how should I explain the difference to him?

6

4 Answers

There are several ways to get the current time in JavaScript:

As mentioned in the comments and MDN links, Date.now() is not supported in Internet Explorer 8. So if IE 8 compatibility is a concern you should use new Date().valueOf() at the cost of slightly diminished code readability.

Or if you want to use Date.now() but must be compatible with browsers which don't support it, you can place following code somewhere in your JavaScript files, which will add support for it.

if (!Date.now) { Date.now = function() { return new Date().getTime(); }
}

2019 answer

Since we no longer care about IE8, only two methods are interesting:

  • new Date() - creates a Date object representing the current date/time
  • Date.now() - returns the number of milliseconds since midnight 01 January, 1970 UTC

(The other two methods mentioned in the older answers are functionally equivalent to Date.now() but look uglier and work in IE8.)

As a matter of style, I found it clearer to use Date.now() in code that deals with intervals (usually subtracting an earlier date from a later date to calculate the time elapsed), and new Date() for timestamps, e.g. those written to a database.

After reading MDN, it seems new Date().getTime(), new Date().valueof() and Date.now() are all functionally equivalent. However, Date.now() is only supported in browsers from different versions, most importantly IE9. So if pre IE9 support is important, you may need to polyfill.

Edit: really, the only concern is IE. Isn't it always? ;)

I am usually using +new Date() or +new Date().toString(36) When i need timestamps.

Recently i changed to Date.now() because it is more efficient or will become one day more efficient.

Technically the os reports the date time as a primitive, by calling new Date() the javascript engine must create a object with prototypes (which is passed by reference, and must be garbage collected later), and then do another function call of valueOf.

Date.now could be a static function of the global Date object, that does simple math on the value reported from the OS

I did'nt checked the source code of all javascript engines to make sure that Date.now does'nt create a date instance, but it is more efficient or will become one day more efficient.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy