y
y
yq
Search…
Date Time
Various operators for parsing and manipulating dates.

Date time formattings

This uses the golangs built in time library for parsing and formatting date times.
When not specified, the RFC3339 standard is assumed 2006-01-02T15:04:05Z07:00 for parsing.
To specify a custom parsing format, use the with_dtf operator. The first parameter sets the datetime parsing format for the expression in the second parameter. The expression can be any valid yq expression tree.
1
yq 'with_dtf("myformat"; .a + "3h" | tz("Australia/Melbourne"))'
Copied!
See https://pkg.go.dev/time#pkg-constants for examples of formatting options.

Timezones

This uses golangs built in LoadLocation function to parse timezones strings. See https://pkg.go.dev/time#LoadLocation for more details.

Durations

Durations are parsed using golangs built in ParseDuration function.
You can durations to time using the + operator.
Note that versions prior to 4.18 require the 'eval/e' command to be specified.
yq e <exp> <file>

Format: from standard RFC3339 format

Providing a single parameter assumes a standard RFC3339 datetime format. If the target format is not a valid yaml datetime format, the result will be a string tagged node.
Given a sample.yml file of:
1
a: 2001-12-15T02:59:43.1Z
Copied!
then
1
yq '.a |= format_datetime("Monday, 02-Jan-06 at 3:04PM")' sample.yml
Copied!
will output
1
a: Saturday, 15-Dec-01 at 2:59AM
Copied!

Format: from custom date time

Use with_dtf to set a custom datetime format for parsing.
Given a sample.yml file of:
1
a: Saturday, 15-Dec-01 at 2:59AM
Copied!
then
1
yq '.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM"; format_datetime("2006-01-02"))' sample.yml
Copied!
will output
1
a: 2001-12-15
Copied!

Format: get the day of the week

Given a sample.yml file of:
1
a: 2001-12-15T02:59:43.1Z
Copied!
then
1
yq '.a | format_datetime("Monday")' sample.yml
Copied!
will output
1
Saturday
Copied!

Now

Given a sample.yml file of:
1
a: cool
Copied!
then
1
yq '.updated = now' sample.yml
Copied!
will output
1
a: cool
2
updated: 2021-05-19T01:02:03Z
Copied!

Timezone: from standard RFC3339 format

Returns a new datetime in the specified timezone. Specify standard IANA Time Zone format or 'utc', 'local'. When given a single parameter, this assumes the datetime is in RFC3339 format.
Given a sample.yml file of:
1
a: cool
Copied!
then
1
yq '.updated = (now | tz("Australia/Sydney"))' sample.yml
Copied!
will output
1
a: cool
2
updated: 2021-05-19T11:02:03+10:00
Copied!

Timezone: with custom format

Specify standard IANA Time Zone format or 'utc', 'local'
Given a sample.yml file of:
1
a: Saturday, 15-Dec-01 at 2:59AM GMT
Copied!
then
1
yq '.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; tz("Australia/Sydney"))' sample.yml
Copied!
will output
1
a: Saturday, 15-Dec-01 at 1:59PM AEDT
Copied!

Add and tz custom format

Specify standard IANA Time Zone format or 'utc', 'local'
Given a sample.yml file of:
1
a: Saturday, 15-Dec-01 at 2:59AM GMT
Copied!
then
1
yq '.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; tz("Australia/Sydney"))' sample.yml
Copied!
will output
1
a: Saturday, 15-Dec-01 at 1:59PM AEDT
Copied!

Date addition

Given a sample.yml file of:
1
a: 2021-01-01T00:00:00Z
Copied!
then
1
yq '.a += "3h10m"' sample.yml
Copied!
will output
1
a: 2021-01-01T03:10:00Z
Copied!

Date subtraction

You can subtract durations from dates. Assumes RFC3339 date time format, see date-time operators for more information.
Given a sample.yml file of:
1
a: 2021-01-01T03:10:00Z
Copied!
then
1
yq '.a -= "3h10m"' sample.yml
Copied!
will output
1
a: 2021-01-01T00:00:00Z
Copied!

Date addition - custom format

Given a sample.yml file of:
1
a: Saturday, 15-Dec-01 at 2:59AM GMT
Copied!
then
1
yq 'with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; .a += "3h1m")' sample.yml
Copied!
will output
1
a: Saturday, 15-Dec-01 at 6:00AM GMT
Copied!

Date script with custom format

You can embed full expressions in with_dtf if needed.
Given a sample.yml file of:
1
a: Saturday, 15-Dec-01 at 2:59AM GMT
Copied!
then
1
yq 'with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; .a = (.a + "3h1m" | tz("Australia/Perth")))' sample.yml
Copied!
will output
1
a: Saturday, 15-Dec-01 at 2:00PM AWST
Copied!