mirror of
https://github.com/mikefarah/yq.git
synced 2024-11-14 23:28:06 +00:00
fa6fac1a76
* Remove extra backtick * Reword explanation of update * Reword explanation of relative update * Change "remaple" to "remain" * Change "clovver" to "clobber" * Reword explanation of update for comment operators * Reword explanation of relative update for comment operators * Change "array" to "expression" * Change "the golangs" to "Golang's" * Change "golangs" to "Golang's" * Change "can durations" to "can add durations" * Change "array scalars" to "arrays" * Change "beit" to "be it" * Fix typo in `eval` tip * Fix typo in header for `has` operation * Add space before pipe in `line` operator example * Fix typos in explanation of deep array merges * Change "is now used" to "is now used." * Change "object," to "object." * Changes "indexes" to "indices" * Remove extraneous copied text from `..` article * Reword explanation of `...` operator * Change "your are" to "you are" * Add link to `string` operator docs in `select` article * Change "is a" to "parameter specifies" in `string` operators article * Change "new line" to "newline" * Change "golang regex" to "Golang's regex" * Change "golang" to "Golang" * Add period * Remove comma in `subtract` article * Remove duplicate number subtraction example * Remove comma in `traverse` operator article * Clarify use of brackets when `read`ing with special characters
222 lines
4.6 KiB
Markdown
222 lines
4.6 KiB
Markdown
# Date Time
|
|
|
|
Various operators for parsing and manipulating dates.
|
|
|
|
## Date time formattings
|
|
This uses Golang's 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 Golang's 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 Golang's built in [ParseDuration](https://pkg.go.dev/time#ParseDuration) function.
|
|
|
|
You can add 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
|
|
```
|
|
|
|
## From Unix
|
|
Converts from unix time. Note, you don't have to pipe through the tz operator :)
|
|
|
|
Running
|
|
```bash
|
|
yq --null-input '1675301929 | from_unix | tz("UTC")'
|
|
```
|
|
will output
|
|
```yaml
|
|
2023-02-02T01:38:49Z
|
|
```
|
|
|
|
## To Unix
|
|
Converts to unix time
|
|
|
|
Running
|
|
```bash
|
|
yq --null-input 'now | to_unix'
|
|
```
|
|
will output
|
|
```yaml
|
|
1621386123
|
|
```
|
|
|
|
## 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
|
|
```
|
|
|