2017-02-02 9 views
0

次の機能をもっとエレガントに書いてもらえますか?PureScriptで翌日の日付を取得する

私はいくつかのパターンを見ることができますが、私はそれらのパターンを抽象化する方法や、より簡単な関数の書き方を見つける方法がわかりません。

type HasRemainder = Boolean 

tomorrow :: Date -> Date 
tomorrow date = unsafePartial $ canonicalDate y (fst m) (fst d) 
    where d :: Tuple Day HasRemainder 
     d = case toEnum $ 1 + fromEnum (day date) of 
      Just v -> Tuple v false 
      Nothing -> Tuple (unsafePartial $ fromJust $ toEnum 1) true 
     m :: Tuple Month HasRemainder 
     m = if snd d then 
       case toEnum $ 1 + fromEnum (month date) of 
       Just v -> Tuple v false 
       Nothing -> Tuple (unsafePartial $ fromJust $ toEnum 1) true 
      else Tuple (month date) false 
     y :: Year 
     y = if snd m then 
       case toEnum $ 1 + fromEnum (year date) of 
       Just v -> v 
       -- use 2018 arbitrarly if the conversion from int to Date fails 
       Nothing -> unsafePartial $ fromJust $ toEnum 2018 
      else (year date) 

答えて

4

をテストしていない私はこのような何かをしたいです万一、入力された日付がtop(12月275日)私が正しく覚えていれば759)。

ので、それはDate一つが欠けているだけの監督だTimeDateTimeためadjust機能があります。

0

私は注意してください、これらの線に沿って何か

getDatePart datepart defaultval1 defaultval2 = 
    case toEnum $ defaultval1 + fromEnum datepart of 
    Just v -> Tuple v false 
    Nothing -> Tuple (unsafePartial $ fromJust $ toEnum defaultval2) true 

getDatePartDefault d datepart defaultval1 defaultval2 = 
    if snd d then 
     getDatePart datepart defaultval1 defaultval2 
    else Tuple datepart false 


tomorrow :: Date -> Date 
tomorrow date = unsafePartial $ canonicalDate (fst y) (fst m) (fst d) 
    where d :: Tuple Day HasRemainder 
      d = getDatePart (day date) 1 1 
      m :: Tuple Month HasRemainder 
      m = getDatePartDefault d (month date) 1 1 
      y :: Tuple Year HasRemainder 
      y = getDatePartDefault d (year date) 1 2018 

をしようとするだろう:それは意志が

import Data.DateTime as DT 
import Data.Maybe (maybe) 
import Data.Time.Duration (Days(..)) 

tomorrow :: DT.Date -> DT.Date 
tomorrow dt = maybe dt DT.date $ DT.adjust (Days 1.0) (DT.DateTime dt bottom) 

:これは

関連する問題