Skip to content

Support lower-case meridiem #67

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 3 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ Notable changes to this project are documented in this file. The format is based

Breaking changes (😱!!!):
- Added support for PureScript 0.14 and dropped support for all previous versions (#62, #64)
- Added support for lower-case meridiem via a new `FormatterCommand` constructor `MeridiemLowerCase`

New features:

Expand Down
41 changes: 21 additions & 20 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -50,26 +50,27 @@ then use formatter to result of division of input number and that power.

This is a subset of common format/parse strings currently supported.

+ `YYYY` - Full Year (1999)
+ `YY` - 2 digit year (99)
+ `MMMM` - Full Month (January)
+ `MMM` - Short Month (Jan)
+ `DD` - Padded Day (02)
+ `D` - Day of month (2)
+ `X` - Unix Timestamp (1506875681)
+ `E` - Day of Week (2)
+ `dddd` - DOW Name (Monday)
+ `ddd` - DOW Name Short (Mon)
+ `HH` - 24 Hour (13)
+ `hh` - 12 Hour (1)
+ `a` - Meridiem (am/pm)
+ `mm` - Minutes Padded (02)
+ `m` - Minutes (2)
+ `ss` - Seconds Padded (02)
+ `s` - Seconds (2)
+ `S` - MilliSeconds (4)
+ `SS` - MilliSeconds (04)
+ `SSS` - MilliSeconds (004)
+ `YYYY` - Full Year (1999)
+ `YY` - 2 digit year (99)
+ `MMMM` - Full Month (January)
+ `MMM` - Short Month (Jan)
+ `DD` - Padded Day (02)
+ `D` - Day of month (2)
+ `X` - Unix Timestamp (1506875681)
+ `E` - Day of Week (2)
+ `dddd` - DOW Name (Monday)
+ `ddd` - DOW Name Short (Mon)
+ `HH` - 24 Hour (13)
+ `hh` - 12 Hour (1)
+ `a` - Meridiem (AM/PM)
+ `A` - MeridiemLowerCase (am/pm)
+ `mm` - Minutes Padded (02)
+ `m` - Minutes (2)
+ `ss` - Seconds Padded (02)
+ `s` - Seconds (2)
+ `S` - MilliSeconds (4)
+ `SS` - MilliSeconds (04)
+ `SSS` - MilliSeconds (004)

Full list is defined [here](https://github.com/slamdata/purescript-formatters/blob/master/src/Data/Formatter/DateTime.purs)

Expand Down
7 changes: 6 additions & 1 deletion src/Data/Formatter/DateTime.purs
Original file line number Diff line number Diff line change
Expand Up @@ -63,6 +63,7 @@ data FormatterCommand
| Hours24
| Hours12
| Meridiem
| MeridiemLowerCase
| Minutes
| MinutesTwoDigits
| Seconds
Expand Down Expand Up @@ -97,6 +98,7 @@ printFormatterCommand = case _ of
Hours24 → "HH"
Hours12 → "hh"
Meridiem → "a"
MeridiemLowerCase → "A"
Minutes → "m"
MinutesTwoDigits → "mm"
Seconds → "s"
Expand All @@ -114,7 +116,7 @@ parseFormatString = runP formatParser

placeholderContent ∷ P.Parser String String
placeholderContent =
CU.toCharArray "YMDEHhamsS"
CU.toCharArray "YMDEHhaAmsS"
# PS.noneOf
# Array.some
<#> CU.fromCharArray
Expand All @@ -136,6 +138,7 @@ formatterCommandParser = (PC.try <<< PS.string) `oneOfAs`
, Tuple "HH" Hours24
, Tuple "hh" Hours12
, Tuple "a" Meridiem
, Tuple "A" MeridiemLowerCase
, Tuple "mm" MinutesTwoDigits
, Tuple "m" Minutes
, Tuple "ss" SecondsTwoDigits
Expand Down Expand Up @@ -180,6 +183,7 @@ formatCommand dt@(DT.DateTime d t) = case _ of
Hours24 → padSingleDigit (fromEnum $ T.hour t)
Hours12 → padSingleDigit $ fix12 $ (fromEnum $ T.hour t) `mod` 12
Meridiem → if (fromEnum $ T.hour t) >= 12 then "PM" else "AM"
MeridiemLowerCase → if (fromEnum $ T.hour t) >= 12 then "pm" else "am"
Minutes → show $ fromEnum $ T.minute t
MinutesTwoDigits → padSingleDigit <<< fromEnum $ T.minute t
Seconds → show $ fromEnum $ T.second t
Expand Down Expand Up @@ -382,6 +386,7 @@ unformatCommandParser = case _ of
Hours12 → _{hour = _} `modifyWithParser`
(parseInt 2 (validateRange 0 12 <> exactLength) "Incorrect 12 hour")
Meridiem → _{meridiem = _} `modifyWithParser` parseMeridiem
MeridiemLowerCase → _{meridiem = _} `modifyWithParser` parseMeridiem
MinutesTwoDigits → _{minute = _} `modifyWithParser`
(parseInt 2 (validateRange 0 59 <> exactLength) "Incorrect 2-digit minute")
Minutes → _{minute = _} `modifyWithParser`
Expand Down
21 changes: 21 additions & 0 deletions test/src/DateTime.purs
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,11 @@ datetimeTest = describe "Data.Formatter.DateTime" do
, { format: "YY", dateStr: "00" , date: makeDateTime 0 4 12 0 0 0 0} -- Format 0 with YY
, { format: "YY", dateStr: "01" , date: makeDateTime (-1) 4 12 0 0 0 0} -- Format -1 with YY
, { format: "hh:m:s a", dateStr: "11:3:4 AM", date: makeDateTime 2017 4 12 11 3 4 234 }
, { format: "hh:m:s A", dateStr: "11:3:4 am", date: makeDateTime 2017 4 12 11 3 4 234 }
, { format: "hh a", dateStr: "12 AM", date: makeDateTime 0 1 1 0 0 0 0 }
, { format: "hh a", dateStr: "12 PM", date: makeDateTime 0 1 1 12 0 0 0 }
, { format: "hh A", dateStr: "12 am", date: makeDateTime 0 1 1 0 0 0 0 }
, { format: "hh A", dateStr: "12 pm", date: makeDateTime 0 1 1 12 0 0 0 }
, { format: "hh:mm:ss a", dateStr: "11:03:04 AM", date: makeDateTime 2017 4 12 11 3 4 234 }
, { format: "hh:mm:ss.SSS", dateStr: "11:12:30.123", date: makeDateTime 2017 4 10 11 12 30 123 }
, { format: "hh:mm:ss.SSS", dateStr: "11:12:30.023", date: makeDateTime 2017 4 10 11 12 30 23 }
Expand Down Expand Up @@ -138,6 +141,24 @@ dateformats =
, FDT.DayOfMonthTwoDigits
]
}
, { str: "HH:mma"
, lossless: false
, format: fromFoldable
[ FDT.Hours24
, FDT.Placeholder ":"
, FDT.MinutesTwoDigits
, FDT.Meridiem
]
}
, { str: "HH:mmA"
, lossless: false
, format: fromFoldable
[ FDT.Hours24
, FDT.Placeholder ":"
, FDT.MinutesTwoDigits
, FDT.MeridiemLowerCase
]
}
, { str: "Y-MM-DD HH:mm:ss:SSS"
, lossless: true
, format: fromFoldable
Expand Down