lib: nthdayof(month|year)containing now validate input a bit (#852)
This commit is contained in:
		
							parent
							
								
									0f3a030a40
								
							
						
					
					
						commit
						daa37a9993
					
				| @ -526,8 +526,10 @@ prevyear = startofyear . addGregorianYearsClip (-1) | |||||||
| nextyear = startofyear . addGregorianYearsClip 1 | nextyear = startofyear . addGregorianYearsClip 1 | ||||||
| startofyear day = fromGregorian y 1 1 where (y,_,_) = toGregorian day | startofyear day = fromGregorian y 1 1 where (y,_,_) = toGregorian day | ||||||
| 
 | 
 | ||||||
| -- | For given date d find year-long interval that starts on given MM/DD of year | -- | For given date d find year-long interval that starts on given | ||||||
| -- and covers it.  | -- MM/DD of year and covers it. | ||||||
|  | -- The given MM and DD should be basically valid (1-12 & 1-31), | ||||||
|  | -- or an error is raised. | ||||||
| -- | -- | ||||||
| -- Examples: lets take 2017-11-22. Year-long intervals covering it that | -- Examples: lets take 2017-11-22. Year-long intervals covering it that | ||||||
| -- starts before Nov 22 will start in 2017. However | -- starts before Nov 22 will start in 2017. However | ||||||
| @ -546,14 +548,18 @@ startofyear day = fromGregorian y 1 1 where (y,_,_) = toGregorian day | |||||||
| -- >>> nthdayofyearcontaining 1 1 wed22nd | -- >>> nthdayofyearcontaining 1 1 wed22nd | ||||||
| -- 2017-01-01           | -- 2017-01-01           | ||||||
| nthdayofyearcontaining :: Month -> MonthDay -> Day -> Day | nthdayofyearcontaining :: Month -> MonthDay -> Day -> Day | ||||||
| nthdayofyearcontaining m n d | mmddOfSameYear <= d = mmddOfSameYear | nthdayofyearcontaining m md date | ||||||
|                              | otherwise = mmddOfPrevYear |   | not (validMonth $ show m)  = error' $ "nthdayofyearcontaining: invalid month "++show m | ||||||
|     where mmddOfSameYear = addDays (fromIntegral n-1) $ applyN (m-1) nextmonth s |   | not (validDay   $ show md) = error' $ "nthdayofyearcontaining: invalid day "  ++show md | ||||||
|           mmddOfPrevYear = addDays (fromIntegral n-1) $ applyN (m-1) nextmonth $ prevyear s |   | mmddOfSameYear <= date = mmddOfSameYear | ||||||
|           s = startofyear d |   | otherwise = mmddOfPrevYear | ||||||
|  |   where mmddOfSameYear = addDays (fromIntegral md-1) $ applyN (m-1) nextmonth s | ||||||
|  |         mmddOfPrevYear = addDays (fromIntegral md-1) $ applyN (m-1) nextmonth $ prevyear s | ||||||
|  |         s = startofyear date | ||||||
| 
 | 
 | ||||||
| -- | For given date d find month-long interval that starts on nth day of month | -- | For given date d find month-long interval that starts on nth day of month | ||||||
| -- and covers it.  | -- and covers it.  | ||||||
|  | -- The given day of month should be basically valid (1-31), or an error is raised. | ||||||
| -- | -- | ||||||
| -- Examples: lets take 2017-11-22. Month-long intervals covering it that | -- Examples: lets take 2017-11-22. Month-long intervals covering it that | ||||||
| -- start on 1st-22nd of month will start in Nov. However | -- start on 1st-22nd of month will start in Nov. However | ||||||
| @ -570,11 +576,13 @@ nthdayofyearcontaining m n d | mmddOfSameYear <= d = mmddOfSameYear | |||||||
| -- >>> nthdayofmonthcontaining 30 wed22nd | -- >>> nthdayofmonthcontaining 30 wed22nd | ||||||
| -- 2017-10-30           | -- 2017-10-30           | ||||||
| nthdayofmonthcontaining :: MonthDay -> Day -> Day | nthdayofmonthcontaining :: MonthDay -> Day -> Day | ||||||
| nthdayofmonthcontaining n d | nthOfSameMonth <= d = nthOfSameMonth | nthdayofmonthcontaining md date | ||||||
|                             | otherwise = nthOfPrevMonth |   | not (validDay $ show md) = error' $ "nthdayofmonthcontaining: invalid day "  ++show md | ||||||
|     where nthOfSameMonth = nthdayofmonth n s |   | nthOfSameMonth <= date = nthOfSameMonth | ||||||
|           nthOfPrevMonth = nthdayofmonth n $ prevmonth s |   | otherwise = nthOfPrevMonth | ||||||
|           s = startofmonth d |   where nthOfSameMonth = nthdayofmonth md s | ||||||
|  |         nthOfPrevMonth = nthdayofmonth md $ prevmonth s | ||||||
|  |         s = startofmonth date | ||||||
| 
 | 
 | ||||||
| -- | For given date d find week-long interval that starts on nth day of week | -- | For given date d find week-long interval that starts on nth day of week | ||||||
| -- and covers it.  | -- and covers it.  | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user