format.dateRange ViewHelper <vhs:format.dateRange>

Date range calculation/formatting ViewHelper

Uses DateTime and DateInterval operations to calculate a range between two DateTimes.

Usages

  • As formatter, the ViewHelper can output a string value such as "2013-04-30 - 2013-05-30" where you can configure both the start and end date (or their common) formats as well as the "glue" which binds the two dates together.

  • As interval calculator, the ViewHelper can be used with a special "intervalFormat" which is a string used in the constructor method for the DateInterval class - for example, "P3M" to add three months. Used this way, you can specify the start date (or rely on the default "now" DateTime) and specify the "intervalFormat" to add your desired duration to your starting date and use that as end date. Without the "return" attribute, this mode simply outputs the formatted dates with interval deciding the end date.

  • When used with the "return" attribute you can specify which type of data to return: - if "return" is "DateTime", a single DateTime instance is returned

    (which is the end date). Use this with a start date to return the DateTime corresponding to "intervalFormat" into the future/past.

    • if "return" is a string such as "w", "d", "h" etc. the corresponding counter value (weeks, days, hours etc.) is returned.

    • if "return" is an array of counter IDs, for example ["w", "d"], the corresponding counters from the range are returned as an array.

Note about LLL support and array consumers

When used with the "return" attribute and when this attribute is an array, the output becomes suitable for consumption by f:translate, v:l or f:format.sprintf for example - as the "arguments" attribute:

<f:translate key="myDateDisplay"
    arguments="{v:format.dateRange(intervalFormat: 'P3W', return: {0: 'w', 1: 'd'})}"
/>

Which if "myDateDisplay" is a string such as "Deadline: %d week(s) and %d day(s)" would output a result such as "Deadline: 4 week(s) and 2 day(s)".

Tip: the values returned by this ViewHelper in both array and single value return modes, are also nicely consumable by the "math" suite of ViewHelpers, for example v:math.division would be able to divide number of days by two, three etc. to further divide the date range.

Arguments

start

DataType

mixed

Default

'now'

Required

false

Description

Start date which can be a DateTime object or a string consumable by DateTime constructor

end

DataType

mixed

Required

false

Description

End date which can be a DateTime object or a string consumable by DateTime constructor

intervalFormat

DataType

string

Required

false

Description

Interval format consumable by DateInterval

format

DataType

string

Default

'Y-m-d'

Required

false

Description

Date format to apply to both start and end date

startFormat

DataType

string

Required

false

Description

Date format to apply to start date

endFormat

DataType

string

Required

false

Description

Date format to apply to end date

glue

DataType

string

Default

'-'

Required

false

Description

Glue string to concatenate dates with

spaceGlue

DataType

boolean

Default

true

Required

false

Description

If TRUE glue string is surrounded with whitespace

return

DataType

mixed

Required

false

Description

Return type; can be exactly "DateTime" to return a DateTime instance, a string like "w" or "d" to return weeks, days between the two dates - or an array of w, d, etc. strings to return the corresponding range count values as an array.