Skip to content

Commit 859e9f5

Browse files
authored
Merge pull request #31 from tippenein/add-weekday-name-format
Add weekday name format for DateTimes
2 parents 201cf5d + bc790a7 commit 859e9f5

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

src/Data/Formatter/DateTime.purs

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,8 @@ data FormatterCommand
5757
| DayOfMonth
5858
| UnixTimestamp
5959
| DayOfWeek
60+
| DayOfWeekName
61+
| DayOfWeekNameShort
6062
| Hours24
6163
| Hours12
6264
| Meridiem
@@ -89,6 +91,8 @@ printFormatterCommand = case _ of
8991
DayOfMonth"D"
9092
UnixTimestamp"X"
9193
DayOfWeek"E"
94+
DayOfWeekName"dddd"
95+
DayOfWeekNameShort"ddd"
9296
Hours24"HH"
9397
Hours12"hh"
9498
Meridiem"a"
@@ -125,6 +129,8 @@ formatterCommandParser = (PC.try <<< PS.string) `oneOfAs`
125129
, Tuple "DD" DayOfMonthTwoDigits
126130
, Tuple "D" DayOfMonth
127131
, Tuple "E" DayOfWeek
132+
, Tuple "dddd" DayOfWeekName
133+
, Tuple "ddd" DayOfWeekNameShort
128134
, Tuple "HH" Hours24
129135
, Tuple "hh" Hours12
130136
, Tuple "a" Meridiem
@@ -167,6 +173,8 @@ formatCommand dt@(DT.DateTime d t) = case _ of
167173
DayOfMonth → show $ fromEnum $ D.day d
168174
UnixTimestamp → show $ Int.floor $ (_ / 1000.0) $ unwrap $ unInstant $ fromDateTime dt
169175
DayOfWeek → show $ fromEnum $ D.weekday d
176+
DayOfWeekName → show $ D.weekday d
177+
DayOfWeekNameShortStr.take 3 $ show $ D.weekday d
170178
Hours24 → padSingleDigit (fromEnum $ T.hour t)
171179
Hours12 → padSingleDigit $ fix12 $ (fromEnum $ T.hour t) `mod` 12
172180
Meridiemif (fromEnum $ T.hour t) >= 12 then "PM" else "AM"
@@ -356,6 +364,10 @@ unformatCommandParser = case _ of
356364
}
357365
-- TODO we would need to use this value if we support date format using week number
358366
DayOfWeek → void $ parseInt 1 (validateRange 1 7) "Incorrect day of week"
367+
DayOfWeekName → _{day = _} `modifyWithParser`
368+
(fromEnum <$> parseDayOfWeekName)
369+
DayOfWeekNameShort → _{day = _} `modifyWithParser`
370+
(fromEnum <$> parseDayOfWeekNameShort)
359371
Hours24 → _{hour = _} `modifyWithParser`
360372
(parseInt 2 (validateRange 0 24 <> exactLength) "Incorrect 24 hour")
361373
Hours12 → _{hour = _} `modifyWithParser`
@@ -405,6 +417,29 @@ parseMeridiem = (PC.try <<< PS.string) `oneOfAs`
405417
, Tuple "PM" PM
406418
]
407419

420+
421+
parseDayOfWeekName m. Monad m P.ParserT String m D.Weekday
422+
parseDayOfWeekName = (PC.try <<< PS.string) `oneOfAs`
423+
[ Tuple "Monday" D.Monday
424+
, Tuple "Tuesday" D.Tuesday
425+
, Tuple "Wednesday" D.Wednesday
426+
, Tuple "Thursday" D.Thursday
427+
, Tuple "Friday" D.Friday
428+
, Tuple "Saturday" D.Saturday
429+
, Tuple "Sunday" D.Sunday
430+
]
431+
432+
parseDayOfWeekNameShort m. Monad m P.ParserT String m D.Weekday
433+
parseDayOfWeekNameShort = (PC.try <<< PS.string) `oneOfAs`
434+
[ Tuple "Mon" D.Monday
435+
, Tuple "Tue" D.Tuesday
436+
, Tuple "Wed" D.Wednesday
437+
, Tuple "Thu" D.Thursday
438+
, Tuple "Fri" D.Friday
439+
, Tuple "Sat" D.Saturday
440+
, Tuple "Sun" D.Sunday
441+
]
442+
408443
parseMonth m. Monad m P.ParserT String m D.Month
409444
parseMonth = (PC.try <<< PS.string) `oneOfAs`
410445
[ Tuple "January" D.January

test/src/DateTime.purs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,8 @@ datetimeTest = describe "Data.Formatter.DateTime" do
2222
, { format: "YYYY-DD-MM", dateStr: "2017-12-04" , date: makeDateTime 2017 4 12 11 3 4 234}
2323
, { format: "YYYY-MMM", dateStr: "2017-Apr" , date: makeDateTime 2017 4 12 11 3 4 234}
2424
, { format: "MMM D", dateStr: "Apr 1" , date: makeDateTime 2017 4 1 0 0 0 0}
25+
, { format: "dddd, MMM D", dateStr: "Saturday, Apr 1" , date: makeDateTime 2017 4 1 0 0 0 0}
26+
, { format: "ddd, MMM D", dateStr: "Sat, Apr 1" , date: makeDateTime 2017 4 1 0 0 0 0}
2527
, { format: "hh:mm:ss:SSS a", dateStr: "11:03:04:234 AM" , date: makeDateTime 2017 4 12 11 3 4 234}
2628
, { format: "YY", dateStr: "17" , date: makeDateTime 2017 4 12 11 3 4 234}
2729
, { format: "YY", dateStr: "17" , date: makeDateTime 20017 4 12 0 0 0 0} -- Format 20017 with YY

0 commit comments

Comments
 (0)