--- title: Date slug: Web/JavaScript/Reference/Global_Objects/Date tags: - Date - Epoch - JavaScript - NeedsTranslation - Time - TopicStub - Unix Epoch - timeStamp translation_of: Web/JavaScript/Reference/Global_Objects/Date ---
Creates a JavaScript Date
instance that represents a single moment in time in a platform-independent format. Date
objects use a Unix Time Stamp, an integer value that is the number of milliseconds since 1 January 1970 UTC.
The only way to create a new JavaScript Date
object is to use the {{jsxref("new")}} operator:
let now = new Date();
If you simply call the {{jsxref("Date", "Date()")}} object directly, the returned value is a string instead of a Date
object. There's no Date
literal syntax in JavaScript.
new Date(); new Date(value); new Date(dateString); new Date(year, monthIndex [, day [, hours [, minutes [, seconds [, milliseconds]]]]]);
There are four basic forms for the Date()
constructor:
When no parameters are provided, the newly-created Date
object represents the current date and time, specified in the local time zone, as of the time of instantiation.
value
dateString
Note: parsing of date strings with the Date
constructor (and Date.parse
, they are equivalent) is strongly discouraged due to browser differences and inconsistencies. Support for RFC 2822 format strings is by convention only. Support for ISO 8601 formats differs in that date-only strings (e.g. "1970-01-01") are treated as UTC, not local.
Given at least a year and month, this form of Date()
returns a Date
object whose component values (year, month, day, hour, minute, second, and millisecond) all come from the following parameters. Any missing fields are given the lowest possible value (1 for the day
and 0 for every other component).
year
monthIndex
day
{{optional_inline}}hours
{{optional_inline}}minutes
{{optional_inline}}seconds
{{optional_inline}}milliseconds
{{optional_inline}}A JavaScript date is fundamentally specified as the number of milliseconds that have elapsed since midnight on January 1, 1970, UTC. This date and time is called the Unix epoch, which is the predominant base value for computer-recorded date and time values.
Note: It's important to keep in mind that the date and time is stored in the local time zone, and that the basic methods to fetch the date and time or its components all work in the local time zone as well.
A day is made up of 86,400,000 milliseconds. Given that and the size of the underlying number used to record the timestamp, and it can be calculated that the Date
object can represent dates within ±100,000,000 (one hundred million) days relative to January 1, 1970 UTC. That means that in the year 293,742, we'll have to think about fixing this.
There are a number of methods available to obtain the date in various formats, as well as to do time zone conversions. Especially useful are the functions that output the date and time in Coordinated Universal Time (UTC), the global standard time defined by the World Time Standard. This time is historically known as Greenwich Mean Time, as UTC lies along the meridian that includes London and nearby Greenwhich in the United Kingdom. The user's device provides the local time.
In addition to methods to read and alter individual components of the local date and time, such as {{jsxref("Date.getDay", "getDay()")}} and {{jsxref("Date.setHours", "setHours()")}}, there are also versions of the same methods that read and maniuplate the date and time using UTC, such as {{jsxref("Date.getUTCDay()", "getUTCDay()")}} and {{jsxref("Date.setHoursUTC", "setUTCHours()")}}.
Date
object.Date.length
Date.length
is 7. This is the number of arguments handled by the constructor. It's not generally a useful result.Note: Parsing of strings with Date.parse
is strongly discouraged due to browser differences and inconsistencies.
Date
instancesAll Date
instances inherit from {{jsxref("Date.prototype")}}. The prototype object of the Date
constructor can be modified to affect all Date
instances.
Date
objectThe following examples show several ways to create JavaScript dates:
Note: parsing of date strings with the Date
constructor (and Date.parse
, they are equivalent) is strongly discouraged due to browser differences and inconsistencies.
var today = new Date(); var birthday = new Date('December 17, 1995 03:24:00'); var birthday = new Date('1995-12-17T03:24:00'); var birthday = new Date(1995, 11, 17); var birthday = new Date(1995, 11, 17, 3, 24, 0);
In order to create and get dates between the years 0 and 99 the {{jsxref("Date.prototype.setFullYear()")}} and {{jsxref("Date.prototype.getFullYear()")}} methods should be used.
var date = new Date(98, 1); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT) // Deprecated method, 98 maps to 1998 here as well date.setYear(98); // Sun Feb 01 1998 00:00:00 GMT+0000 (GMT) date.setFullYear(98); // Sat Feb 01 0098 00:00:00 GMT+0000 (BST)
The following examples show how to determine the elapsed time between two JavaScript dates in milliseconds.
Due to the differing lengths of days (due to daylight saving changeover), months and years, expressing elapsed time in units greater than hours, minutes and seconds requires addressing a number of issues and should be thoroughly researched before being attempted.
// using Date objects var start = Date.now(); // the event to time goes here: doSomethingForALongTime(); var end = Date.now(); var elapsed = end - start; // elapsed time in milliseconds
// using built-in methods var start = new Date(); // the event to time goes here: doSomethingForALongTime(); var end = new Date(); var elapsed = end.getTime() - start.getTime(); // elapsed time in milliseconds
// to test a function and get back its return function printElapsedTime(fTest) { var nStartTime = Date.now(), vReturn = fTest(), nEndTime = Date.now(); console.log('Elapsed time: ' + String(nEndTime - nStartTime) + ' milliseconds'); return vReturn; } var yourFunctionReturn = printElapsedTime(yourFunction);
Note: In browsers that support the {{domxref("window.performance", "Web Performance API", "", 1)}}'s high-resolution time feature, {{domxref("Performance.now()")}} can provide more reliable and precise measurements of elapsed time than {{jsxref("Date.now()")}}.
var seconds = Math.floor(Date.now() / 1000);
In this case it's important to return only an integer (so a simple division won't do), and also to only return actually elapsed seconds (that's why this code uses {{jsxref("Math.floor()")}} and not {{jsxref("Math.round()")}}).
Specification | Status | Comment |
---|---|---|
{{SpecName('ESDraft', '#sec-date-objects', 'Date')}} | {{Spec2('ESDraft')}} | |
{{SpecName('ES6', '#sec-date-objects', 'Date')}} | {{Spec2('ES6')}} | |
{{SpecName('ES5.1', '#sec-15.9', 'Date')}} | {{Spec2('ES5.1')}} | |
{{SpecName('ES1')}} | {{Spec2('ES1')}} | Initial definition. Implemented in JavaScript 1.1. |
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
{{Compat("javascript.builtins.Date", 3)}}