# DA.Date¶

## Data Types¶

data DayOfWeek

data Month

The `Month` type represents a month in the Gregorian calendar.

Note that, while `Month` has an `Enum` instance, the `toEnum` and `fromEnum` functions start counting at 0, i.e. `toEnum 1 :: Month` is `Feb`.

Jan

Feb

Mar

Apr

May

Jun

Jul

Aug

Sep

Oct

Nov

Dec

instance Eq Month

instance Ord Month

instance Bounded Month

instance Enum Month

instance Show Month

## Functions¶

addDays

: Date -> Int -> Date

Add the given number of days to a date.

subtractDays

: Date -> Int -> Date

Subtract the given number of days from a date.

`subtractDays d r` is equivalent to `addDays d (- r)`.

subDate

: Date -> Date -> Int

Returns the number of days between the two given dates.

dayOfWeek

Returns the day of week for the given date.

fromGregorian

: (Int, Month, Int) -> Date

Constructs a `Date` from the triplet `(year, month, days)`.

toGregorian

: Date -> (Int, Month, Int)

Turn `Date` value into a `(year, month, day)` triple, according to the Gregorian calendar.

date

: Int -> Month -> Int -> Date

Given the three values (year, month, day), constructs a `Date` value. `date y m d` turns the year `y`, month `m`, and day `d` into a `Date` value. Raises an error if `d` is outside the range `1 .. monthDayCount y m`.

isLeapYear

: Int -> Bool

Returns `True` if the given year is a leap year.

fromMonth

: Month -> Int

Get the number corresponding to given month. For example, `Jan` corresponds to `1`, `Feb` corresponds to `2`, and so on.

monthDayCount

: Int -> Month -> Int

Get number of days in the given month in the given year, according to Gregorian calendar. This does not take historical calendar changes into account (for example, the moves from Julian to Gregorian calendar), but does count leap years.

datetime

: Int -> Month -> Int -> Int -> Int -> Int -> Time

Constructs an instant using `year`, `month`, `day`, `hours`, `minutes`, `seconds`.

toDateUTC

: Time -> Date

Extracts UTC date from UTC time.

This function will truncate Time to Date, but in many cases it will not return the date you really want. The reason for this is that usually the source of Time would be getTime, and getTime returns UTC, and most likely the date you want is something local to a location or an exchange. Consequently the date retrieved this way would be yesterday if retrieved when the market opens in say Singapore.

passToDate

Within a `scenario`, pass the simulated scenario to given date.