In JSON documents, dates are represented as strings. Elasticsearch uses a set of preconfigured formats to recognize and parse these strings into a long value representing milliseconds-since-the-epoch in UTC.
Besides the built-in formats, your own
custom formats can be specified using the familiar
yyyy/MM/dd syntax:
PUT my_index
{
"mappings": {
"properties": {
"date": {
"type": "date",
"format": "yyyy-MM-dd"
}
}
}
}Many APIs which support date values also support date math
expressions, such as now-1m/d — the current time, minus one month, rounded
down to the nearest day.
Completely customizable date formats are supported. The syntax for these is explained DateTimeFormatter docs.
Most of the below formats have a strict companion format, which means that
year, month and day parts of the week must use respectively 4, 2 and 2 digits
exactly, potentially prepending zeros. For instance a date like 5/11/1 would
be considered invalid and would need to be rewritten to 2005/11/01 to be
accepted by the date parser.
To use them, you need to prepend strict_ to the name of the date format, for
instance strict_date_optional_time instead of date_optional_time.
These strict date formats are especially useful when date fields are dynamically mapped in order to make sure to not accidentally map irrelevant strings as dates.
The following tables lists all the defaults ISO formats supported:
epoch_millis
Long.MIN_VALUE and
Long.MAX_VALUE.
epoch_second
Long.MIN_VALUE and Long.
MAX_VALUE divided by 1000 (the number of milliseconds in a second).
date_optional_time or strict_date_optional_time
basic_date
yyyyMMdd.
basic_date_time
yyyyMMdd'T'HHmmss.SSSZ.
basic_date_time_no_millis
yyyyMMdd'T'HHmmssZ.
basic_ordinal_date
yyyyDDD.
basic_ordinal_date_time
yyyyDDD'T'HHmmss.SSSZ.
basic_ordinal_date_time_no_millis
yyyyDDD'T'HHmmssZ.
basic_time
HHmmss.SSSZ.
basic_time_no_millis
HHmmssZ.
basic_t_time
'T'HHmmss.SSSZ.
basic_t_time_no_millis
'T'HHmmssZ.
basic_week_date or strict_basic_week_date
xxxx'W'wwe.
basic_week_date_time or strict_basic_week_date_time
xxxx'W'wwe'T'HHmmss.SSSZ.
basic_week_date_time_no_millis or strict_basic_week_date_time_no_millis
xxxx'W'wwe'T'HHmmssZ.
date or strict_date
yyyy-MM-dd.
date_hour or strict_date_hour
yyyy-MM-dd'T'HH.
date_hour_minute or strict_date_hour_minute
yyyy-MM-dd'T'HH:mm.
date_hour_minute_second or strict_date_hour_minute_second
yyyy-MM-dd'T'HH:mm:ss.
date_hour_minute_second_fraction or strict_date_hour_minute_second_fraction
yyyy-MM-dd'T'HH:mm:ss.SSS.
date_hour_minute_second_millis or strict_date_hour_minute_second_millis
yyyy-MM-dd'T'HH:mm:ss.SSS.
date_time or strict_date_time
yyyy-MM-dd'T'HH:mm:ss.SSSZZ.
date_time_no_millis or strict_date_time_no_millis
yyyy-MM-dd'T'HH:mm:ssZZ.
hour or strict_hour
HH
hour_minute or strict_hour_minute
HH:mm.
hour_minute_second or strict_hour_minute_second
HH:mm:ss.
hour_minute_second_fraction or strict_hour_minute_second_fraction
HH:mm:ss.SSS.
hour_minute_second_millis or strict_hour_minute_second_millis
HH:mm:ss.SSS.
ordinal_date or strict_ordinal_date
yyyy-DDD.
ordinal_date_time or strict_ordinal_date_time
yyyy-DDD'T'HH:mm:ss.SSSZZ.
ordinal_date_time_no_millis or strict_ordinal_date_time_no_millis
yyyy-DDD'T'HH:mm:ssZZ.
time or strict_time
HH:mm:ss.SSSZZ.
time_no_millis or strict_time_no_millis
HH:mm:ssZZ.
t_time or strict_t_time
'T'HH:mm:ss.SSSZZ.
t_time_no_millis or strict_t_time_no_millis
'T'HH:mm:ssZZ.
week_date or strict_week_date
xxxx-'W'ww-e.
week_date_time or strict_week_date_time
xxxx-'W'ww-e'T'HH:mm:ss.SSSZZ.
week_date_time_no_millis or strict_week_date_time_no_millis
xxxx-'W'ww-e'T'HH:mm:ssZZ.
weekyear or strict_weekyear
xxxx.
weekyear_week or strict_weekyear_week
xxxx-'W'ww.
weekyear_week_day or strict_weekyear_week_day
xxxx-'W'ww-e.
year or strict_year
yyyy.
year_month or strict_year_month
yyyy-MM.
year_month_day or strict_year_month_day
yyyy-MM-dd.