blob: 2c078a9b4e129a1558db92c061698336f7f98b36 [file] [log] [blame]
---
page_title: timecmp - Functions - Configuration Language
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 Terraform 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](/terraform/language/expressions/custom-conditions) 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`](/terraform/language/functions/timestamp) returns the current timestamp when it is evaluated
during the apply step.
* [`timeadd`](/terraform/language/functions/timeadd) can perform arithmetic on timestamps by adding or removing a specified duration.