Nov 23, 2021 8:18 PM
Nov 02, 2025 4:03 PM

JavaScript

· Programming language · Computer programming ·

Wiki

Datasheet

Paradigm Multi-paradigm: event-driven, functional, imperative, object-oriented programming
Designed by Brendan Eich of Netscape initially; others have also contributed to the ECMAScript standard
First appeared December 4, 1995; 26 years ago
Stable release ECMAScript 2021 / June 2021; 7 months ago
Preview release ECMAScript 2022 / 22 July 2021; 6 months ago
Typing discipline Dynamic, weak, duck
Filename extensions .js.cjs.mjs
Major implementations V8, JavaScriptCore, SpiderMonkey, Chakra
Influenced by Java, Scheme, Self, AWK, HyperTalk
Influenced ActionScript, AssemblyScript, CoffeeScript, Dart, Haxe, JS++, Objective-J, Opa, TypeScript

Description

JavaScript often abbreviated JS, is a programming language that is one of the core technologies of the World Wide Web, alongside HTML and CSS. Over 97% of websites use JavaScript on the client side for web page behavior, often incorporating third-party libraries. All major web browsers have a dedicated JavaScript engine to execute the code on users' devices.

JavaScript is a high-level, often just-in-time compiled language that conforms to the ECMAScript standard. It has dynamic typing, prototype-based object-orientation, and first-class functions. It is multi-paradigm, supporting event-driven, functional, and imperative programming styles. It has application programming interfaces (APIs) for working with text, dates, regular expressions, standard data structures, and the Document Object Model (DOM).

The ECMAScript standard does not include any input/output (I/O), such as networking, storage, or graphics facilities. In practice, the web browser or other runtime system provides JavaScript APIs for I/O.

JavaScript engines were originally used only in web browsers, but are now core components of some servers and a variety of applications. The most popular runtime system for this usage is Node.js.

Although Java and JavaScript are similar in name, syntax, and respective standard libraries, the two languages are distinct and differ greatly in design.

Datatypes

Datetime

Formatting

MomentJS formatting

moment().format(); moment().format(String);

This is the most robust display option. It takes a string of tokens and replaces them with their corresponding values.

moment().format();                                // "2014-09-08T08:02:17-05:00" (ISO 8601, no fractional seconds)
moment().format("dddd, MMMM Do YYYY, h:mm:ss a"); // "Sunday, February 14th 2010, 3:25:50 pm"
moment().format("ddd, hA");                       // "Sun, 3PM"
moment().format("[Today is] dddd");               // "Today is Sunday"
moment('gibberish').format('YYYY MM DD');         // "Invalid date"
Token Output
Month M 1 2... 11 12
Mo 1st 2nd... 11th 12th
MM 01 02... 11 12
MMM Jan Feb... Nov Dec
MMMM January February... November December
Quarter Q 1 2 3 4
Qo 1st 2nd 3rd 4th
Day of Month D 1 2... 30 31
Do 1st 2nd... 30th 31st
DD 01 02... 30 31
Day of Year DDD 1 2... 364 365
DDDo 1st 2nd... 364th 365th
DDDD 001 002... 364 365
Day of Week d 0 1... 5 6
do 0th 1st... 5th 6th
dd Su Mo... Fr Sa
ddd Sun Mon... Fri Sat
dddd Sunday Monday... Friday Saturday
Day of Week (Locale) e 0 1... 5 6
Day of Week (ISO) E 1 2... 6 7
Week of Year w 1 2... 52 53
wo 1st 2nd... 52nd 53rd
ww 01 02... 52 53
Week of Year (ISO) W 1 2... 52 53
Wo 1st 2nd... 52nd 53rd
WW 01 02... 52 53
Year YY 70 71... 29 30
YYYY 1970 1971... 2029 2030
YYYYYY -001970 -001971... +001907 +001971 Note:Expanded Years (Covering the full time value range of approximately 273,790 years forward or backward from 01 January, 1970)
Y 1970 1971... 9999 +10000 +10001 Note: This complies with the ISO 8601 standard for dates past the year 9999
Era Year y 1 2... 2020...
Era N, NN, NNN BC AD Note: Abbr era name
NNNN Before Christ, Anno Domini Note: Full era name
NNNNN BC AD Note: Narrow era name
Week Year gg 70 71... 29 30
gggg 1970 1971... 2029 2030
Week Year (ISO) GG 70 71... 29 30
GGGG 1970 1971... 2029 2030
AM/PM A AM PM
a am pm
Hour H 0 1... 22 23
HH 00 01... 22 23
h 1 2... 11 12
hh 01 02... 11 12
k 1 2... 23 24
kk 01 02... 23 24
Minute m 0 1... 58 59
mm 00 01... 58 59
Second s 0 1... 58 59
ss 00 01... 58 59
Fractional Second S 0 1... 8 9
SS 00 01... 98 99
SSS 000 001... 998 999
SSSS... SSSSSSSSS 000[0..] 001[0..]... 998[0..] 999[0..]
Time Zone z or zz EST CST... MST PST Note: as of 1.6.0, the z/zz format tokens have been deprecated from plain moment objects. Read more about it here. However, they *do* work if you are using a specific time zone with the moment-timezone addon.
Z -07:00 -06:00... +06:00 +07:00
ZZ -0700 -0600... +0600 +0700
Unix Timestamp X 1360013296
Unix Millisecond Timestamp x 1360013296123

X was added in 2.0.0.

e E gg gggg GG GGGG were added in 2.1.0.

x was added in 2.8.4.

SSSS to SSSSSSSSS were added in 2.10.5. They display 3 significant digits and the rest is filled with zeros.

k and kk were added in 2.13.0.

Localized formats

Because preferred formatting differs based on locale, there are a few tokens that can be used to format a moment based on its locale.

There are upper and lower case variations on the same formats. The lowercase version is intended to be the shortened version of its uppercase counterpart.

Time LT 8:30 PM
Time with seconds LTS 8:30:25 PM
Month numeral, day of month, year L 09/04/1986
l 9/4/1986
Month name, day of month, year LL September 4, 1986
ll Sep 4, 1986
Month name, day of month, year, time LLL September 4, 1986 8:30 PM
lll Sep 4, 1986 8:30 PM
Month name, day of month, day of week, year, time LLLL Thursday, September 4, 1986 8:30 PM
llll Thu, Sep 4, 1986 8:30 PM

l ll lll llll are available in 2.0.0.LTS was added in 2.8.4.

Escaping characters

To escape characters in format strings, you can wrap the characters in square brackets.

moment().format('[today] dddd'); // 'today Sunday'

Similarities and differences with LDML

Note: While these date formats are very similar to LDML date formats, there are a few minor differences regarding day of month, day of year, and day of week.

For a breakdown of a few different date formatting tokens across different locales, see this chart of date formatting tokens.

Formatting speed

To compare Moment.js formatting speed against other libraries, check out this comparison against other libraries.

Other tokens

If you are more comfortable working with strftime instead of LDML-like parsing tokens, you can use Ben Oakes' plugin. benjaminoakes/moment-strftime.

Default format

Calling moment#format without a format will default to moment.defaultFormat. Out of the box, moment.defaultFormat is the ISO8601 format YYYY-MM-DDTHH:mm:ssZ.

As of version 2.13.0, when in UTC mode, the default format is governed by moment.defaultFormatUtc which is in the format YYYY-MM-DDTHH:mm:ss[Z]. This returns Z as the offset, instead of +00:00.

In certain instances, a local timezone (such as Atlantic/Reykjavik) may have a zero offset, and will be considered to be UTC. In such cases, it may be useful to set moment.defaultFormat and moment.defaultFormatUtc to use the same formatting.

Changing the value of moment.defaultFormat will only affect formatting, and will not affect parsing. for example:

moment.defaultFormat = "DD.MM.YYYY HH:mm";
// parse with .toDate()
moment('20.07.2018 09:19').toDate() // Invalid date
// format the date string with the new defaultFormat then parse
moment('20.07.2018 09:19', moment.defaultFormat).toDate() // Fri Jul 20 2018 09:19:00 GMT+0300