---
title: "Compare Dates"
slug: "compare-dates"
updated: 2026-01-21T13:33:37Z
published: 2026-01-21T13:33:37Z
---

> ## Documentation Index
> Fetch the complete documentation index at: https://docs.mapp.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Compare Dates

These functions provide tools for comparing two date values. Many of these functions process and return the information as a Boolean value which can be used to create personalization rules or selection criteria.

## Function Overview

| Function | Description |
| --- | --- |
| ​ecm:equal​ | Determines whether two specified dates are equal. |
| ​ecm:greater​ | Determines whether a specified date is greater than a reference date. |
| ​ecm:greaterEqual​ | Determines whether a specified date is equal to or greater than a reference date. |
| ​ecm:less​ | Determines whether a specified date is less than a reference date. |
| ​ecm:lessEqual​ | Determines whether a specified date is equal to or less than a reference date. |
| ​ecm:notEqual​ | Determines whether a specified date is not equal to a reference date. |
| ​ecm:age​ | Returns the number of years between two dates. |
| ​ecm:between​ | Determines whether a specified date is between a start and an end date. |
| ​ecx:durationBetween​ | Calculates the difference between two dates in a specified unit. |
| ​ecx:isInTimePeriod​ | Verifies whether the current time is within one of the periods given as a parameter. |

---

## ecm:equal​

The function **ecm:equal**determines whether two specified dates are equal. The comparison is exact to the millisecond. The value returned is a Boolean data type.

### Example

A selection is used to send a thank you message to group members on the anniversary of the date they signed up for a newsletter. This date is stored in the custom attribute ​WelcomeDate​.

The function ecm:trunc is used to reset the time component for both the current date and the attribute value to zero. It is then possible to use the function ecm:equal to define the selection criteria because the time component is negated. The expression is constructed as follows:

```javascript
${ecm:equal(ecm:trunc(user.CustomAttribute['WelcomeDate'], 'time')), (ecm:trunc(date.Today, 'time'))}
```

### Structure​

ecm:equal(date, date)

### Parameters​

| Parameter | Description |
| --- | --- |
| date | Specifies the target date. |
| date | The date value used for the comparison. |

---

## ​ecm:greater​

The function **ecm:greater**determines whether a specified date is greater than a reference date. The comparison is exact to the millisecond. The value returned is a Boolean data type.

### Example

Personalization is displayed to recipients under 30 years old when a message is sent. The message is scheduled for sendout on April 5, 2011.

The content is inserted into the message with an ​InsertIf​ statement, which is constructed as follows:

```javascript
<%InsertIf expression="${ecm:greater(user['DateOfBirth'], ecm:toDate('1981-05-04', ecm:timeZone('Europe/Berlin')))}"%>Text<%/InsertIf%>
```

### Structure​

ecm:equal(date, date)

### Parameters​

| Parameter | Description |
| --- | --- |
| date | Specifies the target date. |
| date | The date value used for the comparison. |

---

## ​ecm:greaterEqual​

The function **ecm:greaterEqual** determines whether a specified date is equal or greater than a reference date. The comparison is exact to the millisecond. The value returned is a Boolean data type.

### Example

Personalization is displayed to recipients under 30 years old when a message is sent. The message is scheduled for sendout on April 5, 2011.

The content is inserted into the message with an ​InsertIf​ statement, which is constructed as follows:

```javascript
<%InsertIf expression="${ecm:greaterEqual(user['DateOfBirth'], ecm:toDate('1981-05-04', ecm:timeZone('Europe/Berlin')))}"%>Text<%/InsertIf%>
```

### Structure​

ecm:greaterEqual(date, date)

### Parameters​

| Parameter | Description |
| --- | --- |
| date | Specifies the target date. |
| date | The date value used for the comparison. |

---

## ​ecm:less​

The function **ecm:less** determines whether a specified date is less than a reference date. The comparison is exact to the millisecond. The value returned is a Boolean data type.

### Example

Personalization is displayed to recipients who are at least 55 years old when a message is sent. The message is scheduled for sendout on April 5, 2011.

The content is inserted into the message with an ​InsertIf​ statement, which is constructed as follows:

```javascript
<%InsertIf expression="${ecm:less(user['DateOfBirth'], ecm:toDate('1956-05-04', ecm:timeZone('Europe/Berlin')))}"%>Text<%/InsertIf%>
```

Structure​

ecm:less(date, date)

### Parameters​

| Parameter | Description |
| --- | --- |
| date | Specifies the target date. |
| date | The date value used for the comparison. |

---

## ​ecm:lessEqual​

The function **ecm:lessEqual** determines whether a specified date is equal to or less than a reference date. The comparison is exact to the millisecond. The value returned is a Boolean data type.

### Example

Personalization is displayed to recipients who are at least 55 years old when a message is sent. The message is scheduled for sendout on April 5, 2011.

The content is inserted into the message with an ​InsertIf​ statement, which is constructed as follows:

```javascript
<%InsertIf expression="${ecm:lessEqual(user['DateOfBirth'], ecm:toDate('1956-05-04', ecm:timeZone('Europe/Berlin')))}"%>Text<%/InsertIf%>
```

### Structure​

ecm:lessEqual(date, date)

### Parameters​

| Parameter | Description |
| --- | --- |
| date | Specifies the target date. |
| date | The date value used for the comparison. |

---

## ​ecm:notEqual​

The function **ecm:notEqual** determines whether a specified date is not equal to a reference date. The comparison includes millisecond values. The value returned is a Boolean data type.

### Example

```javascript
${ecm:notEqual(user.DateOfBirth, ecm:toDate('1986-01-01', ecm:timeZone('Europe/Berlin')))}
```

### Structure​

ecm:notEqual(date, date)

### Parameters​

| Parameter | Description |
| --- | --- |
| date | Specifies the target date. |
| date | The date value used for the comparison. |

---

## ​ecm:age​

The function **ecm:age**returns the number of years between two dates. The value returned is a long data type.

### Example

A Personalization is displayed to recipients who are 20 years or older at the time of message sendout. The function ecm:age compares the date of birth stored in a user attribute to the current date and returns a long number. This number is evaluated (using the mathematical operator greater than or equal) to return a Boolean value. If a Boolean value true is returned, the personalization is inserted into the message with an ​InsertIf statement. The ​InsertIf​ is constructed as follows:

```javascript
<%InsertIf expression="${((ecm:age(user['DateOfBirth'], 'date.Today')>='20'))}"%>Text<%/InsertIf%>
```

### Structure​

ecm:age(date, date)

### Parameters​

| Parameter | Description |
| --- | --- |
| date | Specifies the target date. |
| date | The date value used for the comparison. |

---

## ​ecm:between​

The function **ecm:between** determines whether a specified date is between a start and an end date. The value returned is a Boolean data type.

### Example

A selection verifies whether a recipient is 18 years of age or older. The function ecm:between checks whether the date of birth stored as a user attribute is between today's date and the date 18 years in the past (using the additional function ecm:addInterval to subtract 18 years from today's date). The function is constructed as follows:

```javascript
${ecm:between(user['DateOfBirth'], ecm:addInterval(date.Today, '-18Y'), date.Today)}
```

### Structure​

ecm:between(date, date, date)

### Parameters​

| Parameter | Description |
| --- | --- |
| date | Specifies the target date. |
| date | The value used as a start date. |
| date | The value used as an end date. |

---

## ​ecx:durationBetween​

The function **ecx:durationBetween** calculates the difference between two dates in a specified unit. The value returned is a string data type.

### Example

Calculate the number of days between a recipient's date of birth, which is stored as an attribute value, and the current date. The function is constructed as follows:

```javascript
${ecx:durationBetween(user['DateOfBirth'], date.Today, 'days')}
```

### Structure​

ecx:durationBetween (date, date, string)

### Parameters​

| Parameter | Description |
| --- | --- |
| date | The value used as a start date. |
| date | The value used as an end date. |
| string | Specifies the unit of time used to calculate the duration. Possible units include 'seconds', 'minutes', 'hours', 'days', 'weeks', 'months' and 'years'. |

---

## ​ecx:isInTimePeriod​

The function ecx:isInTimePeriod verifies whether the current time is within one of the periods given as a parameter. The value returned is a Boolean data type.

### Example

Message sendout is restricted to between 16:00 and 22:30 in the Europe/London time zone. The following function returns a true value if the current time is within a period of 6 hours and 30 minutes after 16:00:

```javascript
${ecx:isInTimePeriod('16:00PT6H30M', 'Europe/London')}
```

### Structure​

ecx:isInTimePeriod(string, string)

### Parameters​

| Parameter | Description |
| --- | --- |
| string | Specifies the time period used for comparison. Must be given in ISO 8601 format and only contain the local time part, for example, 18:00PT8H is equal to a period of 8 hours starting at 18:00. |
| string | The time zone used as local time. If no time zone is given, 'Europe/Berlin' will be used as default. |
