Date
The built-in type Date
represents a calendar date as a year, month and day-of-month.
Being a representation of a calendar date, Date
does not uniquely define an Instant
or even a range of Instant
values on the global timeline.
For example, the date 2020-01-01
can be seen as the range of instants from #2020-01-01T00:00Z#
to #2020-01-01T23:59:59.999Z#
if interpreted as a local date in the GMT time zone, but in the time zone Europe/Copenhagen
it can be seen as the instants from #2019-12-31T23:00Z#
to #2020-01-01T22:59:59.999Z#
.
If you need to perform arithmetic on calendar dates together with time of day, use the zoned time and date functions.
Date::components : Date -> Date::Components
Returns the underlying representation of the given date. The returned data type has the following definition:
module YearMonth {
type Components {
year : Year,
month : Month
}
}
module Date {
type Components : YearMonth::Components {
day : Int
}
}
Examples
val a = Date::components (Date::from 2020 December 21)
// = Date::Components {
// day = 21,
// month = December,
// year = Year::fromInt 2020
// }
Date::fromComponents : Date::Components -> Date
Construct a Date
from the underlying components. This function is partial and fails if the day
component is invalid for the given year
and month
.
Examples
val a = Date::fromComponents Date::Components {
day = 21,
month = December,
year = Year::fromInt 2020
}
// = Date::from 2020 December 21
Date::from : Int -> Int -> Int -> Date
A convenience wrapper around Date::fromComponents which takes the year, month and day as positional Int
arguments.
Date::epochDay : Date -> Int
Returns the epoch day, defined as the number of calendar days since 1970-01-01
until the given date. The returned value may be negative if the given date is before the epoch.
This function is useful for obtaining the number of calendar days between two dates, as this equals the difference between their epoch days.
To obtain a Date
from an epoch day, use Date::addPeriod.
Examples
val a = Date::epochDay (Date::from 2020 December 21)
// = 18617
val b = Date::addPeriod (Period::from 0 0 18617) (Date::from 1970 January 1)
// = Date::from 2020 12 21
Date::dayOfWeek : Date -> DayOfWeek
Returns the day of week for the given date.
Examples
val a = Date::dayOfWeek (Date::from 2020 December 21)
// = Monday
Date::addPeriod : Period -> Date -> Date
Adds a calendar period to the given date.
A calendar period consists of a number of years, months and days. The period is added to the given date by first adding all the years, then all the months and finally all the days. Adding one year and adding 12 months is equivalent. If the day of month component would be invalid after all the months have been added, then it is adjusted back to the last valid day of month before the days of the period are added.
Examples
// Adding 1 month. Adding one month to 2020-03-31 gives the invalid date 2020-04-31 which is adjusted back to 2020-04-30.
val a = Date::addPeriod (Period::from 0 1 0) (Date::from 2020 March 31)
// = Date::from 2020 4 30
// Adding 1 month and 1 day.
val b = Date::addPeriod (Period::from 0 1 1) (Date::from 2020 March 31)
// = Date::from 2020 5 1