feat: more date & time formats
This commit is contained in:
parent
30b687e56f
commit
936c3666fc
@ -132,7 +132,7 @@ user-defaults:
|
|||||||
max-favourite-terms: 2
|
max-favourite-terms: 2
|
||||||
theme: Default
|
theme: Default
|
||||||
date-time-format: "%a %d %b %Y %R"
|
date-time-format: "%a %d %b %Y %R"
|
||||||
date-format: "%d.%m.%Y"
|
date-format: "%a %d %b %Y"
|
||||||
time-format: "%R"
|
time-format: "%R"
|
||||||
download-files: false
|
download-files: false
|
||||||
warning-days: 1209600
|
warning-days: 1209600
|
||||||
|
|||||||
@ -34,6 +34,8 @@ import Data.Time.Clock.System (systemEpochDay)
|
|||||||
|
|
||||||
import qualified Data.Csv as Csv
|
import qualified Data.Csv as Csv
|
||||||
|
|
||||||
|
import qualified Data.Char as Char
|
||||||
|
|
||||||
|
|
||||||
-------------
|
-------------
|
||||||
-- UTCTime --
|
-- UTCTime --
|
||||||
@ -84,7 +86,7 @@ instance HasLocalTime TimeOfDay where
|
|||||||
toLocalTime = LocalTime systemEpochDay
|
toLocalTime = LocalTime systemEpochDay
|
||||||
|
|
||||||
formatTime' :: (HasLocalTime t, MonadHandler m) => String -> t -> m Text
|
formatTime' :: (HasLocalTime t, MonadHandler m) => String -> t -> m Text
|
||||||
formatTime' fmtStr t = fmap fromString $ Time.formatTime <$> getTimeLocale <*> pure fmtStr <*> pure (toLocalTime t)
|
formatTime' fmtStr t = fmap fromString $ Time.formatTime <$> getTimeLocale <*> pure fmtStr <*> pure (utcToZonedTime . localTimeToUTCTZ appTZ $ toLocalTime t)
|
||||||
|
|
||||||
-- formatTime :: (FormatTime t, MonadHandler m, HandlerSite m ~ UniWorX, IsString str) => (DateTimeFormat -> String) -> t -> m str
|
-- formatTime :: (FormatTime t, MonadHandler m, HandlerSite m ~ UniWorX, IsString str) => (DateTimeFormat -> String) -> t -> m str
|
||||||
-- Restricted type for safety
|
-- Restricted type for safety
|
||||||
@ -123,33 +125,50 @@ getDateTimeFormat sel = do
|
|||||||
|
|
||||||
validDateTimeFormats :: TimeLocale -> SelDateTimeFormat -> Set DateTimeFormat
|
validDateTimeFormats :: TimeLocale -> SelDateTimeFormat -> Set DateTimeFormat
|
||||||
-- ^ We use a whitelist instead of just letting the user specify their own format string since vulnerabilities in printf-like functions are not uncommon
|
-- ^ We use a whitelist instead of just letting the user specify their own format string since vulnerabilities in printf-like functions are not uncommon
|
||||||
validDateTimeFormats _ SelFormatDateTime = Set.fromList
|
validDateTimeFormats tl SelFormatDateTime = Set.fromList $
|
||||||
[ DateTimeFormat "%a %d %b %Y %R"
|
[ DateTimeFormat "%Y-%m-%dT%R"
|
||||||
, DateTimeFormat "%a %b %d %Y %R"
|
|
||||||
, DateTimeFormat "%A, %d %B %Y %R"
|
|
||||||
, DateTimeFormat "%A, %B %d %Y %R"
|
|
||||||
, DateTimeFormat "%a %d %b %Y %T"
|
|
||||||
, DateTimeFormat "%a %b %d %Y %T"
|
|
||||||
, DateTimeFormat "%A, %d %B %Y %T"
|
|
||||||
, DateTimeFormat "%A, %B %d %Y %T"
|
|
||||||
, DateTimeFormat "%d.%m.%Y %R"
|
|
||||||
, DateTimeFormat "%d.%m.%Y %T"
|
|
||||||
, DateTimeFormat "%a %d.%m.%y %R"
|
|
||||||
, DateTimeFormat "%R %d.%m.%Y"
|
|
||||||
, DateTimeFormat "%T %d.%m.%Y"
|
|
||||||
, DateTimeFormat "%Y-%m-%d %R"
|
|
||||||
, DateTimeFormat "%Y-%m-%d %T"
|
|
||||||
, DateTimeFormat "%Y-%m-%dT%T"
|
, DateTimeFormat "%Y-%m-%dT%T"
|
||||||
|
] ++
|
||||||
|
[ DateTimeFormat $ unwords [firstF, secondF]
|
||||||
|
| DateTimeFormat tFormat <- Set.toList $ validDateTimeFormats tl SelFormatTime
|
||||||
|
, DateTimeFormat dFormat <- Set.toList $ validDateTimeFormats tl SelFormatDate
|
||||||
|
, (firstF, secondF) <- [(tFormat, dFormat), (dFormat, tFormat)]
|
||||||
|
] ++
|
||||||
|
[ DateTimeFormat $ unwords [dayFmt, timeFmt, yearFmt]
|
||||||
|
| dayFmt <- [ "%a %d %b"
|
||||||
|
, "%a %b %d"
|
||||||
|
, "%A, %d %B"
|
||||||
|
, "%A, %B %d"
|
||||||
|
, "%d.%m"
|
||||||
|
, "%a %d.%m"
|
||||||
|
, "%A %d.%m"
|
||||||
|
]
|
||||||
|
, timeFmt <- [ "%R"
|
||||||
|
, "%T"
|
||||||
|
]
|
||||||
|
, yearFmt <- [ "%y", "%Y" ]
|
||||||
]
|
]
|
||||||
validDateTimeFormats _ SelFormatDate = Set.fromList
|
validDateTimeFormats _ SelFormatDate = Set.fromList
|
||||||
[ DateTimeFormat "%a %d %b %Y"
|
[ DateTimeFormat "%a %d %b %Y"
|
||||||
, DateTimeFormat "%a %b %d %Y"
|
, DateTimeFormat "%a %b %d %Y"
|
||||||
|
, DateTimeFormat "%d %b %Y"
|
||||||
|
, DateTimeFormat "%b %d %Y"
|
||||||
|
, DateTimeFormat "%d %B %Y"
|
||||||
|
, DateTimeFormat "%B %d %Y"
|
||||||
|
, DateTimeFormat "%d %b %y"
|
||||||
|
, DateTimeFormat "%b %d %y"
|
||||||
|
, DateTimeFormat "%d %B %y"
|
||||||
|
, DateTimeFormat "%B %d %y"
|
||||||
, DateTimeFormat "%A, %d %B %Y"
|
, DateTimeFormat "%A, %d %B %Y"
|
||||||
, DateTimeFormat "%A, %B %d %Y"
|
, DateTimeFormat "%A, %B %d %Y"
|
||||||
|
, DateTimeFormat "%A, %d %b %Y"
|
||||||
|
, DateTimeFormat "%A, %b %d %Y"
|
||||||
, DateTimeFormat "%d.%m.%y"
|
, DateTimeFormat "%d.%m.%y"
|
||||||
, DateTimeFormat "%d.%m.%Y"
|
, DateTimeFormat "%d.%m.%Y"
|
||||||
, DateTimeFormat "%a %d.%m.%y"
|
, DateTimeFormat "%a %d.%m.%y"
|
||||||
, DateTimeFormat "%a %d.%m.%Y"
|
, DateTimeFormat "%a %d.%m.%Y"
|
||||||
|
, DateTimeFormat "%A %d.%m.%y"
|
||||||
|
, DateTimeFormat "%A %d.%m.%Y"
|
||||||
, DateTimeFormat "%Y-%m-%d"
|
, DateTimeFormat "%Y-%m-%d"
|
||||||
, DateTimeFormat "%y-%m-%d"
|
, DateTimeFormat "%y-%m-%d"
|
||||||
]
|
]
|
||||||
@ -162,8 +181,13 @@ validDateTimeFormats TimeLocale{..} SelFormatTime = Set.fromList . concat . catM
|
|||||||
guard $ uncurry (/=) amPm
|
guard $ uncurry (/=) amPm
|
||||||
Just
|
Just
|
||||||
[ DateTimeFormat "%I:%M %p"
|
[ DateTimeFormat "%I:%M %p"
|
||||||
, DateTimeFormat "%I:%M %P"
|
|
||||||
, DateTimeFormat "%I:%M:%S %p"
|
, DateTimeFormat "%I:%M:%S %p"
|
||||||
|
]
|
||||||
|
, do
|
||||||
|
guard $ uncurry (/=) amPm
|
||||||
|
guard $ any (any $ not . Char.isLower) [fst amPm, snd amPm]
|
||||||
|
Just
|
||||||
|
[ DateTimeFormat "%I:%M %P"
|
||||||
, DateTimeFormat "%I:%M:%S %P"
|
, DateTimeFormat "%I:%M:%S %P"
|
||||||
]
|
]
|
||||||
]
|
]
|
||||||
|
|||||||
Reference in New Issue
Block a user