@@ -46,6 +46,7 @@ data FormatterF a
46
46
| MonthFull a
47
47
| MonthShort a
48
48
| MonthTwoDigits a
49
+ | DayOfMonthTwoDigits a
49
50
| DayOfMonth a
50
51
| UnixTimestamp a
51
52
| DayOfWeek a
@@ -65,6 +66,7 @@ instance formatterFFunctor ∷ Functor FormatterF where
65
66
map f (MonthFull a) = MonthFull $ f a
66
67
map f (MonthShort a) = MonthShort $ f a
67
68
map f (MonthTwoDigits a) = MonthTwoDigits $ f a
69
+ map f (DayOfMonthTwoDigits a) = DayOfMonthTwoDigits $ f a
68
70
map f (DayOfMonth a) = DayOfMonth $ f a
69
71
map f (UnixTimestamp a) = UnixTimestamp $ f a
70
72
map f (DayOfWeek a) = DayOfWeek $ f a
@@ -91,7 +93,8 @@ printFormatterF cb = case _ of
91
93
MonthFull a → " MMMM" <> cb a
92
94
MonthShort a → " MMM" <> cb a
93
95
MonthTwoDigits a → " MM" <> cb a
94
- DayOfMonth a → " DD" <> cb a
96
+ DayOfMonthTwoDigits a → " DD" <> cb a
97
+ DayOfMonth a → " D" <> cb a
95
98
UnixTimestamp a → " X" <> cb a
96
99
DayOfWeek a → " E" <> cb a
97
100
Hours24 a → " HH" <> cb a
@@ -143,7 +146,8 @@ formatterFParser cb =
143
146
, (PC .try $ PS .string " MMMM" ) *> map MonthFull cb
144
147
, (PC .try $ PS .string " MMM" ) *> map MonthShort cb
145
148
, (PC .try $ PS .string " MM" ) *> map MonthTwoDigits cb
146
- , (PC .try $ PS .string " DD" ) *> map DayOfMonth cb
149
+ , (PC .try $ PS .string " DD" ) *> map DayOfMonthTwoDigits cb
150
+ , (PC .try $ PS .string " D" ) *> map DayOfMonth cb
147
151
, (PC .try $ PS .string " E" ) *> map DayOfWeek cb
148
152
, (PC .try $ PS .string " HH" ) *> map Hours24 cb
149
153
, (PC .try $ PS .string " hh" ) *> map Hours12 cb
@@ -180,6 +184,8 @@ formatF cb dt@(DT.DateTime d t) = case _ of
180
184
MonthTwoDigits a →
181
185
let month = fromEnum $ D .month d
182
186
in (padSingleDigit month) <> cb a
187
+ DayOfMonthTwoDigits a →
188
+ show (fromEnum $ D .day d) <> cb a
183
189
DayOfMonth a →
184
190
show (fromEnum $ D .day d) <> cb a
185
191
UnixTimestamp a →
@@ -315,12 +321,18 @@ unformatFParser cb = case _ of
315
321
when (Arr .length ds /= 2 || month > 12 || month < 1 ) $ P .fail " Incorrect 2-digit month"
316
322
lift $ modify _{month = Just month}
317
323
cb a
318
- DayOfMonth a → do
324
+ DayOfMonthTwoDigits a → do
319
325
ds ← some digit
320
326
let dom = foldDigits ds
321
327
when (Arr .length ds /= 2 || dom > 31 || dom < 1 ) $ P .fail " Incorrect day of month"
322
328
lift $ modify _{day = Just dom}
323
329
cb a
330
+ DayOfMonth a → do
331
+ ds ← some digit
332
+ let dom = foldDigits ds
333
+ when (Arr .length ds > 2 || dom > 31 || dom < 1 ) $ P .fail " Incorrect day of month"
334
+ lift $ modify _{day = Just dom}
335
+ cb a
324
336
UnixTimestamp a → do
325
337
s ← map foldDigits $ some digit
326
338
case map toDateTime $ instant $ Dur.Milliseconds $ 1000.0 * Int .toNumber s of
0 commit comments