mirror of
https://github.com/mikefarah/yq.git
synced 2024-11-14 23:28:06 +00:00
198 lines
4.3 KiB
Markdown
198 lines
4.3 KiB
Markdown
# 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.
|
|
|
|
```bash
|
|
yq 'with_dtf("myformat"; .a + "3h" | tz("Australia/Melbourne"))'
|
|
```
|
|
|
|
See the [library docs](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 the [library docs](https://pkg.go.dev/time#LoadLocation) for more details.
|
|
|
|
|
|
## Durations
|
|
Durations are parsed using golangs built in [ParseDuration](https://pkg.go.dev/time#ParseDuration) function.
|
|
|
|
You can durations to time using the `+` operator.
|
|
|
|
## 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:
|
|
```yaml
|
|
a: 2001-12-15T02:59:43.1Z
|
|
```
|
|
then
|
|
```bash
|
|
yq '.a |= format_datetime("Monday, 02-Jan-06 at 3:04PM")' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: Saturday, 15-Dec-01 at 2:59AM
|
|
```
|
|
|
|
## Format: from custom date time
|
|
Use with_dtf to set a custom datetime format for parsing.
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: Saturday, 15-Dec-01 at 2:59AM
|
|
```
|
|
then
|
|
```bash
|
|
yq '.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM"; format_datetime("2006-01-02"))' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: 2001-12-15
|
|
```
|
|
|
|
## Format: get the day of the week
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: 2001-12-15
|
|
```
|
|
then
|
|
```bash
|
|
yq '.a | format_datetime("Monday")' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
Saturday
|
|
```
|
|
|
|
## Now
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: cool
|
|
```
|
|
then
|
|
```bash
|
|
yq '.updated = now' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: cool
|
|
updated: 2021-05-19T01:02:03Z
|
|
```
|
|
|
|
## 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:
|
|
```yaml
|
|
a: cool
|
|
```
|
|
then
|
|
```bash
|
|
yq '.updated = (now | tz("Australia/Sydney"))' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: cool
|
|
updated: 2021-05-19T11:02:03+10:00
|
|
```
|
|
|
|
## Timezone: with custom format
|
|
Specify standard IANA Time Zone format or 'utc', 'local'
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: Saturday, 15-Dec-01 at 2:59AM GMT
|
|
```
|
|
then
|
|
```bash
|
|
yq '.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; tz("Australia/Sydney"))' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: Saturday, 15-Dec-01 at 1:59PM AEDT
|
|
```
|
|
|
|
## Add and tz custom format
|
|
Specify standard IANA Time Zone format or 'utc', 'local'
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: Saturday, 15-Dec-01 at 2:59AM GMT
|
|
```
|
|
then
|
|
```bash
|
|
yq '.a |= with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; tz("Australia/Sydney"))' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: Saturday, 15-Dec-01 at 1:59PM AEDT
|
|
```
|
|
|
|
## Date addition
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: 2021-01-01T00:00:00Z
|
|
```
|
|
then
|
|
```bash
|
|
yq '.a += "3h10m"' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: 2021-01-01T03:10:00Z
|
|
```
|
|
|
|
## Date subtraction
|
|
You can subtract durations from dates. Assumes RFC3339 date time format, see [date-time operators](https://mikefarah.gitbook.io/yq/operators/datetime#date-time-formattings) for more information.
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: 2021-01-01T03:10:00Z
|
|
```
|
|
then
|
|
```bash
|
|
yq '.a -= "3h10m"' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: 2021-01-01T00:00:00Z
|
|
```
|
|
|
|
## Date addition - custom format
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: Saturday, 15-Dec-01 at 2:59AM GMT
|
|
```
|
|
then
|
|
```bash
|
|
yq 'with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; .a += "3h1m")' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: Saturday, 15-Dec-01 at 6:00AM GMT
|
|
```
|
|
|
|
## Date script with custom format
|
|
You can embed full expressions in with_dtf if needed.
|
|
|
|
Given a sample.yml file of:
|
|
```yaml
|
|
a: Saturday, 15-Dec-01 at 2:59AM GMT
|
|
```
|
|
then
|
|
```bash
|
|
yq 'with_dtf("Monday, 02-Jan-06 at 3:04PM MST"; .a = (.a + "3h1m" | tz("Australia/Perth")))' sample.yml
|
|
```
|
|
will output
|
|
```yaml
|
|
a: Saturday, 15-Dec-01 at 2:00PM AWST
|
|
```
|
|
|