Onit Documentation

Date Calculations Liquid Examples

by Michael Nadeau Updated on

Date Calculations

If you are using any date math in a UI Action (as opposed to a regular Action), you must first use the to_date filter. E.g., {{ date_field | add_days: 3 }} will produce an error; {{ date_field | to_date | add_days: 3}} will work.

Formatting Dates

27 Nov 2017: {{ created_at | short }}

November 27, 2017: {{ created at | long }}

27 Nov 2017 9:29 AM: {{ created_at | short_time }}

November 27, 2017, 9:29 AM: {{ created_at | long_time }}

3 months ago: {{ created_at | when }}

11/27/2017: {{ created_at | date: '%m/%d/%Y' }}

Common Date Math:

Add Days: {{ date_field | add_days: 3 }}

Subtract Days: {{ date_field | subtract_days: 3 }}

To Date: {% assign now_date = now | to_date %} {{ now | to_date }}

Subtract Dates (returns a number): {{ date1 | subtract_date: date2 }}

Assign Current Date: {{ now | date: "%y/%m/%d" }}

Assign Current DateTime: {{ now | date: '%Y-%m-%dT%T' }}

Useful Date Liquid Filters:

{{ add_years }}
{{ subtract_years }}
{{ add_months }}
{{ subtract_months }}
{{ add_business_days }}
{{ subtract_business_days }}

Output the number of days that have elapsed between two DateTime Fields:

{% assign started_sec = phase_started | date: "%s"%}
{% assign ended_sec = phase_ended | date: "%s"%}
{% assign total_elapsed_seconds = ended_sec | minus: started_sec%}
{% assign days_elapsed_int = total_elapsed_seconds | divided_by: 86400%}
{% assign days_elapsed_mod = total_elapsed_seconds | modulo: 86400%}
{% assign hours_elapsed_int = days_elapsed_mod | divided_by: 3600%}
{% assign hours_elapsed_mod = days_elapsed_mod | modulo: 3600%}
{% assign minutes_elapsed_int = hours_elapsed_mod | divided_by: 60%}
{% assign minutes_elapsed_mod = hours_elapsed_mod | modulo: 60%}
{{days_elapsed_int}} Days, {{hours_elapsed_int}} Hours, {{minutes_elapsed_int}} Minutes

*Where phase_started and phase_ended represent the custom DateTime Field names whose values should be used in the calculation.

Output the number of elapsed business days between two DateTime Fields:

{% assign start = phase_started | date: '%s' %}
{% assign end = phase_ended | date: '%s' %}
{% assign days = end | minus: start %}
{% assign leftover = days |  modulo: 86400 %}
{% assign days = days | minus: leftover %}
{% assign days = days |  divided_by: 86400 %}
{% assign first_day = phase_started | date: '%u' %}
{% assign last_day = phase_ended | date: '%u' %}
{% assign diff = first_day | minus: last_day %}
{% if first_day > last_day %}
{% assign days_to_subtract = 7 | minus: diff %}
{% else %}
{% assign days_to_subtract = diff | times: -1 %}
{% endif %}
{% assign days = days | minus: days_to_subtract | plus:1 | round %}
{% assign weeks = days | divided_by: 7 %}
{% assign business_days = weeks | times: 5 %}
{% if last_day > first_day %}
{% assign last_minus_days = last_day  | minus: days_to_subtract %}
{% if last_minus_days > 6 %}
{% assign business_days = business_days | plus: days_to_subtract | minus: 1 %}
{% else %}
{% assign business_days = business_days | plus: days_to_subtract %}
{% endif %}
{% else %}
{% if days_to_subtract != 0 %}
{% assign days_greater= days_to_subtract | minus: last_day %}
{% assign days_to_subtract = days_to_subtract | minus: days_greater %}
{% assign business_days = business_days | plus: days_to_subtract %}
{% endif %}
{% endif %}
{% if leftover > 0 %}
{% assign business_days = business_days | plus: 1 %}
{% endif %}
{{business_days}}

*Where phase_started and phase_ended represent the custom DateTime Field names whose values should be used in the calculation.

Previous Article Working with Participants Liquid Examples
Next Article Working with Fields Liquid Examples

© 2024 Onit, Inc.

docs.onit.com contains proprietary and confidential information owned by Onit, Inc. that is subject to copyright. Onit presents it exclusively to you for your sole use in conjunction with using Onit products. No portion of the materials contained herein may be used for any other purpose. No portion of the materials contained herein may be shared with third parties or reproduced in any form.