| --- | |
| sidebar_label: timecmp | |
| description: |- | |
| The timecmp function adds a duration to a timestamp, returning a new | |
| timestamp. | |
| --- | |
| # `timecmp` Function | |
| `timecmp` compares two timestamps and returns a number that represents the | |
| ordering of the instants those timestamps represent. | |
| ```hcl | |
| timecmp(timestamp_a, timestamp_b) | |
| ``` | |
| | Condition | Return Value | | |
| |----------------------------------------------------|--------------| | |
| | `timestamp_a` is before `timestamp_b` | `-1` | | |
| | `timestamp_a` is the same instant as `timestamp_b` | `0` | | |
| | `timestamp_a` is after `timestamp_b` | `1` | | |
| When comparing the timestamps, `timecmp` takes into account the UTC offsets | |
| given in each timestamp. For example, `06:00:00+0200` and `04:00:00Z` are | |
| the same instant after taking into account the `+0200` offset on the first | |
| timestamp. | |
| In the OpenTofu language, timestamps are conventionally represented as | |
| strings using [RFC 3339](https://tools.ietf.org/html/rfc3339) | |
| "Date and Time format" syntax. `timecmp` requires the its two arguments to | |
| both be strings conforming to this syntax. | |
| ## Examples | |
| ``` | |
| > timecmp("2017-11-22T00:00:00Z", "2017-11-22T00:00:00Z") | |
| 0 | |
| > timecmp("2017-11-22T00:00:00Z", "2017-11-22T01:00:00Z") | |
| -1 | |
| > timecmp("2017-11-22T01:00:00Z", "2017-11-22T00:00:00Z") | |
| 1 | |
| > timecmp("2017-11-22T01:00:00Z", "2017-11-22T00:00:00-01:00") | |
| 0 | |
| ``` | |
| `timecmp` can be particularly useful in defining | |
| [custom condition checks](../../language/expressions/custom-conditions.mdx) that | |
| involve a specified timestamp being within a particular range. For example, | |
| the following resource postcondition would raise an error if a TLS certificate | |
| (or other expiring object) expires sooner than 30 days from the time of | |
| the "apply" step: | |
| ```hcl | |
| lifecycle { | |
| postcondition { | |
| condition = timecmp(timestamp(), timeadd(self.expiration_timestamp, "-720h")) < 0 | |
| error_message = "Certificate will expire in less than 30 days." | |
| } | |
| } | |
| ``` | |
| ## Related Functions | |
| * [`timestamp`](../../language/functions/timestamp.mdx) returns the current timestamp when it is evaluated | |
| during the apply step. | |
| * [`timeadd`](../../language/functions/timeadd.mdx) can perform arithmetic on timestamps by adding or removing a specified duration. |