Skip to content

Formatting Date & Time

Whenever a chart (or any other chart element) needs to format a date value, it turns to its DateFormatter (accesible via dateFormatter property) to do the actual formatting.

As we saw in our introductory article about formatters, setting a date format is about setting dateFormat property of the respective DateFormatter object. Normally, you just use single DateFormatter for the whole chart (accessible via chart’s dateFormatter property). However, you give their own DateFormatters to just about any individual object in the chart.

/**
* Set date format for the whole chart
*/
chart.dateFormatter.dateFormat = "yyyy-MM-dd";
/**
* Use separate DateFormatter for X axis, so we can set different format
* (this presumes that X axis of type DateAxis was already created)
*/
xAxis.dateFormatter = new am4core.DateFormatter();
xAxis.dateFormatter.dateFormat = "MM-dd";

Below demonstrates how various dateFormat settings affect Chart Cursor’s tooltip contents on a Date Axis.

These codes will be replaced with the corresponding value.

Field

Sym.

No.

Example

Description

era

G

1

AD

Era - Replaced with the Era string for the current date.

year

y

1..n

1996

Year

Y

1..n

1997

Year (of “Week of Year”), used in ISO year-week calendar. May differ from calendar year.

u

1..n

4601

Extended year. This is a single number designating the year of this calendar system, encompassing all supra-year fields. For example, for the Julian calendar system, year numbers are positive, with an era of BCE or CE. An extended year value for the Julian calendar system assigns positive values to CE years and negative values to BCE years, with 1 BCE being year 0.

quarter

q

1

3

Calendar quarter of the year starting from January.

month

M

1..2

09

Month - Use one or two for the numerical month, three for the abbreviation, or four for the full name, or 5 for the narrow name.

Deviation from standard The 3-character code calls for a 4-character month names in Unicode standard. Since it’s universally common to use 3-character abbreviations, amCharts deviates from the standard here.

3

Sep

4

September

5

S

week

w

1..2

27

Week of Year.

W

1

3

Week of Month

day

d

1..2

1

Date - Day of the month

D

1..3

345

Day of year

F

1

2

Day of Week in Month. The example is for the 2nd Wed in July.

g

1..n

2451334

Modified Julian day. This is different from the conventional Julian day number in two regards. First, it demarcates days at local zone midnight, rather than noon GMT. Second, it is a local number; that is, it depends on the local time zone. It can be thought of as a single number that encompasses all the date-related fields.

t

1

st

Day ordinal: “st”, “nd”, “rd”.

weekday

E

1..2

3

Day of week - Use three for the short day, or four for the full name, or 5 for the narrow name.

Deviation from standard 3-character code should result in 4-letter abbreviation. However the 3-letter abbreviation is more common, so we’re using it, instead of the one listed in standard.

Sunday is 7, not 1 as per Unicode standard.

3

Tues

4

Tuesday

5

T

e

1..2

2

Local day of week. Same as E except numeric value will depend on the local starting day of the week. For this example, Monday is the first day of the week.

3

Tues

4

Tuesday

5

T

period

a

1

AM

AM or PM

a

2

A.M.

A.M. or P.M.

a

3

A

A or P

hour

h

1..2

11

Hour [1-12].

H

1..2

13

Hour [0-23].

K

1..2

0

Hour [0-11].

k

1..2

24

Hour [1-24].

minute

m

1..2

59

Minute. Use one or two for zero padding.

second

s

1..2

12

Second. Use one or two for zero padding.

S

1..n

3456

Fractional Second - rounds to the count of letters. (example is for 12.34567)

A

1..n

69540000

Milliseconds in day. This field behaves exactly like a composite of all time-related fields, not including the zone fields. As such, it also reflects discontinuities of those fields on DST transition days. On a day of DST onset, it will jump forward. On a day of DST cessation, it will jump backward. This reflects the fact that is must be combined with the offset field to obtain a unique local time value.

x

1

1507908460868

Milliseconds since 1970-01-01 / “Unix epoch” – a timestamp.

n

1..3

029

Milliseconds. Use one to three for zero padding. This is similar to “S” except number of letters determine padding of numbers instead of rounding.

zone

z

1

PT

Timezone. Use 1 for short wall (generic) time, 2 for long wall time, 3 for the short timezone (i.e. PST) or 4 for the full name (Pacific Standard Time). If there’s no name for the zone, fallbacks may be used, depending on available data.

2

Pacific Time

3

PDT

4

Pacific Daylight Time

Z

1

GMT-08:00

Use 1 for GMT format, 2 for RFC 822

2

-0800

special formats

i

1

2017-10-14T05:24:17.872Z

Date/time formatted according to ISO8601 format.

I

1

Sat, 14 Oct 2017 05:21:51 GMT

Date/time formatted to a string representation using UTC time zone according to RFC-1123 specification.

Date formats can be specified using JavaScript’s built-in Intl object. Please refer to “Formatting date/time and numbers using “Intl” object” for further information.

DateFormatter will respect bracketed style formats. E.g.:

[bold red]yyyy-MM-dd

Read more about styling strings in “Formatting Strings”.

As we saw in our introductory article on Formatters, you can override global or local dateFormat with a TextFormatter data field function formatDate().

series.tooltipText = "{dateX.formatDate('yyyy-mm')}: {valueY.formatNumber('#.00')}";
series.tooltipText = "{dateX.formatDate('yyyy-mm')}: {valueY.formatNumber('#.00')}";
"series": [{
// ...
"tooltipText": "{dateX.formatDate('yyyy-mm')}: {valueY.formatNumber('#.00')}"
]}

amCharts DateFormatter can parse string-based dates according to supplied format. Parsing format uses a subset of the available formatting codes.

When chart parses externally loaded data, or even if you set the date-based data directly to the chart, but use strings or integer timestamps instead of full-fledged Date objects chart expects, it will use its dateFormatter to parse those into dates.

When parsing dates, DateFormatter will use the format set in its inputDateFormat property, rather that dateFormat. This allows have different input and output formats.

Below is the list of codes that are supported in parsing:

Field

Sym.

No.

Example

era

G

1

AD

year

y

1..n

1996

Y

1..n

1997

month

M

1..2

09

3

Sep

4

September

week

w

1..2

27

W

1

3

day

d

1..2

1

D

1..3

345

period

a

1

AM

a

2

A.M.

a

3

A

hour

h

1..2

11

H

1..2

13

K

1..2

0

k

1..2

24

minute

m

1..2

59

second

s

1..2

12

S

1..n

3456

x

1

1507908460868

n

1..3

029

zone

Z

1

GMT-08:00

2

-0800

special formats

i

1

2017-10-14T05:24:17.872Z

To explicitly make formatter ignore a portion of text, enclose it within single quotes:

yyyy.MM.dd G 'at' HH:mm:ss zzz

The "at" above will not be parsed when being processed by DateFormatter. It will be left as is:

2016.09.21 AD at 19:18:01 GMT+3

Any text enclosed in single quotes will be displayed as is, without applying formatting to it.

To use a single quote (either within quoted text or outside it) add single quote twice:

HH:mm:ss 'o''clock'

Will result in:

19:18:01 o'clock

Square and curly brackets have special meaning in formatting text labels as well.

Please refer to the “Formatting Strings” article for more info.

The language-specific codes like months, weekdays, am/pm indicator and date ordinals are translatable in language files.

Date ordinals are complex and vary greatly across languages. The translation comes in a form of a custom function.

Please refer to article “Locales” for more details about chart translations and locale settings.

Please refer to “Formatting date and time” section in “Date Axis” article, for info and examples, of how formatters are used on a Date axis.