Extra functions for working with the Date
type from the Elm 0.18 core library.
The Date
module from Elm 0.18 core was replaced by the library elm/time
, where the Date
type is now replaced by Zone
and Posix
types. A subset of this package has been ported to work with Zone
and Posix
:
Most of the remaining features of this package can be found in these Elm 0.19 packages that work with Posix
:
And if you only need to work with dates, without clock time or time zones, then this Date
type is available for Elm 0.19:
elm-package install justinmimbs/elm-date-extra
See the changelog before upgrading.
Only examples of common uses are given below; see the docs for the full API.
Create dates from parts.
import Date exposing (Month(..))
import Date.Extra as Date
Date.fromParts 1999 Dec 31 23 59 0 0
-- <31 December 1999, 23:59, local time>
Create dates from strings in ISO 8601 format.
Date.fromIsoString "2000-01-01T00:00:00.000"
-- Ok <1 January 2000, local time>
Date.fromIsoString "2009-W01-1T00Z"
-- Ok <29 December 2008, UTC>
Date.fromIsoString "2016-218T20:00:00.000-03:00"
-- Ok <5 August 2016, 23:00, UTC>
Create a date from a specified day, time of day, and time offset.
Date.fromSpec
(calendarDate 2016 Aug 5)
(time 20 0 0 0)
(offset -180)
-- <5 August 2016, 23:00, UTC>
Convert dates to formatted strings, using templates based on Date Format Patterns in Unicode Technical Standard #35.
date = Date.fromParts 2007 Mar 15 13 45 56 67
Date.toFormattedString "EEEE, MMMM d, y 'at' h:mm a" date
-- "Thursday, March 15, 2007 at 1:45 PM"
Date.toUtcIsoString date
-- "2007-03-15T17:45:56.067Z"
-- (example has a local offset of UTC-04:00)
Operate on the numeric properties of dates.
import Date exposing (Month(..))
import Date.Extra as Date exposing (Interval(..))
date = Date.fromParts 1999 Dec 31 23 59 59 999
Date.add Week -2 date
-- <17 December 1999, 23:59:59.999>
Date.diff Day date (Date.add Week 2 date)
-- 14
Date.floor Hour date
-- <31 December 1999, 23:00>
Date.ceiling Monday date
-- <3 January 2000, 00:00>
-- List every Monday in the month of `date`:
Date.range Monday 1
(Date.floor Month date) -- <1 December 1999>
(Date.ceiling Month date) -- <1 January 2000>
-- [ <6 December 1999>
-- , <13 December 1999>
-- , <20 December 1999>
-- , <27 December 1999>
-- ]