diff --git a/bower.json b/bower.json index c7ecb82..358297e 100644 --- a/bower.json +++ b/bower.json @@ -16,16 +16,16 @@ "package.json" ], "dependencies": { - "purescript-datetime": "^6.0.0", + "purescript-datetime": "^6.1.0", "purescript-fixed-points": "^7.0.0", "purescript-lists": "^7.0.0", - "purescript-numbers": "^9.0.0", - "purescript-parsing": "^9.0.0", - "purescript-prelude": "^6.0.0", + "purescript-numbers": "^9.0.1", + "purescript-parsing": "^10.2.0", + "purescript-prelude": "^6.0.1", "purescript-transformers": "^6.0.0" }, "devDependencies": { - "purescript-aff": "^7.0.0", + "purescript-aff": "^7.1.0", "purescript-assert": "^6.0.0", "purescript-console": "^6.0.0", "purescript-effect": "^4.0.0" diff --git a/src/Data/Formatter/DateTime.purs b/src/Data/Formatter/DateTime.purs index 84c105b..ec0ec15 100644 --- a/src/Data/Formatter/DateTime.purs +++ b/src/Data/Formatter/DateTime.purs @@ -92,7 +92,7 @@ printFormatterCommand = case _ of DayOfMonthTwoDigits -> "DD" DayOfMonth -> "D" UnixTimestamp -> "X" - DayOfWeek -> "E" + DayOfWeek -> "d" DayOfWeekName -> "dddd" DayOfWeekNameShort -> "ddd" Hours24 -> "HH" @@ -111,7 +111,7 @@ printFormatterCommand = case _ of needsEscaping = CU.toCharArray >>> Array.any (flip Array.elem formatCharacters) formatCharacters :: Array Char -formatCharacters = CU.toCharArray "YMDEHhamsS" +formatCharacters = CU.toCharArray "YMDXdHhamsS" printFormatter :: Formatter -> String printFormatter = foldMap printFormatterCommand @@ -146,10 +146,10 @@ formatterCommandParser = , Tuple "MM" MonthTwoDigits , Tuple "DD" DayOfMonthTwoDigits , Tuple "D" DayOfMonth - , Tuple "E" DayOfWeek , Tuple "X" UnixTimestamp , Tuple "dddd" DayOfWeekName , Tuple "ddd" DayOfWeekNameShort + , Tuple "d" DayOfWeek , Tuple "HH" Hours24 , Tuple "hh" Hours12 , Tuple "a" Meridiem diff --git a/test/src/DateTime.purs b/test/src/DateTime.purs index b938d34..ed5e490 100644 --- a/test/src/DateTime.purs +++ b/test/src/DateTime.purs @@ -24,7 +24,7 @@ datetimeTest = describe "Data.Formatter.DateTime" do , { format: "MMM D", dateStr: "Apr 1", date: makeDateTime 2017 4 1 0 0 0 0 } , { format: "dddd, MMM D", dateStr: "Saturday, Apr 1", date: makeDateTime 2017 4 1 0 0 0 0 } , { format: "ddd, MMM D", dateStr: "Sat, Apr 1", date: makeDateTime 2017 4 1 0 0 0 0 } - , { format: "E", dateStr: "6", date: makeDateTime 2017 4 1 0 0 0 0 } + , { format: "d", dateStr: "6", date: makeDateTime 2017 4 1 0 0 0 0 } , { format: "hh:mm:ss:SSS a", dateStr: "11:03:04:234 AM", date: makeDateTime 2017 4 12 11 3 4 234 } , { format: "YY", dateStr: "17", date: makeDateTime 2017 4 12 11 3 4 234 } , { format: "YY", dateStr: "17", date: makeDateTime 20017 4 12 0 0 0 0 } -- Format 20017 with YY @@ -86,6 +86,13 @@ datetimeTest = describe "Data.Formatter.DateTime" do invalidDateformats (\f -> (FDT.parseFormatString f.str) `shouldEqual` (Left $ "Expected EOF " <> f.pos)) + describe "parseFormatString/printFormatter should roundtrip" do + forAll + _.str + "should parse" + dateformats + (\f -> (FDT.printFormatter <$> FDT.parseFormatString f.str) `shouldEqual` (Right f.str)) + forAll (\a -> a.format <> " | " <> a.date) "s ≡ format (unformat s)" @@ -200,7 +207,7 @@ dateformats = , FDT.MinutesTwoDigits ] } - , { str: "Y-MM-DD [at] HH:mm:ss:SSS" + , { str: "Y-MM-DD[ at ]HH:mm:ss:SSS" , lossless: true , format: fromFoldable [ FDT.YearAbsolute @@ -230,4 +237,15 @@ dateformats = , FDT.Milliseconds ] } + , { str: "YYYY-DD-MM[X]" + , lossless: false + , format: fromFoldable + [ FDT.YearFull + , FDT.Placeholder "-" + , FDT.DayOfMonthTwoDigits + , FDT.Placeholder "-" + , FDT.MonthTwoDigits + , FDT.Placeholder "X" + ] + } ]