47 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			47 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								# Hints
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## General
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- Review the functions available in the [`NaiveDateTime` module][naive-date-time], the [`Date` module][date], and the [`Time` module][time].
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 1. Parse the stored datetimes
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- There is a [built-in function][naive-date-time-from-iso8601] that parses an ISO8601 datetime string and returns a `NaiveDateTime` struct.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 2. Determine if a book was checked out before noon
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- You can define a `Time` literal using the [`~T` sigil][time-sigil].
							 | 
						||
| 
								 | 
							
								- There is a [built-in function][naive-date-time-to-time] that changes a `NaiveDateTime` struct to a `Time` struct.
							 | 
						||
| 
								 | 
							
								- There is a [built-in function][time-compare] that checks which one of two `Time` structs is bigger.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 3. Calculate the return date
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- A day has `24 * 60 * 60` seconds.
							 | 
						||
| 
								 | 
							
								- There is a [built-in function][naive-date-time-add] that adds a given number of seconds to a `NaiveDateTime` struct.
							 | 
						||
| 
								 | 
							
								- There is a [built-in function][naive-date-time-to-date] that changes a `NaiveDateTime` struct to a `Date` struct.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 4. Determine how late the return of the book was
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- There is a [built-in function][naive-date-time-to-date] that changes a `NaiveDateTime` struct to a `Date` struct.
							 | 
						||
| 
								 | 
							
								- There is a [built-in function][date-diff] that calculates the difference in days between two `Date` structs.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 5. Determine if the book was returned on a Monday
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- There is a [built-in function][naive-date-time-to-date] that changes a `NaiveDateTime` struct to a `Date` struct.
							 | 
						||
| 
								 | 
							
								- There is a [built-in function][date-day-of-week] that returns the day of week for a given `Date` struct.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## 6. Calculate the late fee
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								- Combine together all of the functions that you defined in previous steps.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								[naive-date-time]: https://hexdocs.pm/elixir/NaiveDateTime.html
							 | 
						||
| 
								 | 
							
								[time]: https://hexdocs.pm/elixir/Time.html
							 | 
						||
| 
								 | 
							
								[date]: https://hexdocs.pm/elixir/Date.html
							 | 
						||
| 
								 | 
							
								[naive-date-time-from-iso8601]: https://hexdocs.pm/elixir/NaiveDateTime.html#from_iso8601!/2
							 | 
						||
| 
								 | 
							
								[naive-date-time-to-time]: https://hexdocs.pm/elixir/NaiveDateTime.html#to_time/1
							 | 
						||
| 
								 | 
							
								[naive-date-time-to-date]: https://hexdocs.pm/elixir/NaiveDateTime.html#to_date/1
							 | 
						||
| 
								 | 
							
								[naive-date-time-add]: https://hexdocs.pm/elixir/NaiveDateTime.html#add/3
							 | 
						||
| 
								 | 
							
								[time-sigil]: https://hexdocs.pm/elixir/Kernel.html#sigil_T/2
							 | 
						||
| 
								 | 
							
								[time-compare]: https://hexdocs.pm/elixir/Time.html#compare/2
							 | 
						||
| 
								 | 
							
								[date-diff]: https://hexdocs.pm/elixir/Date.html#diff/2
							 | 
						||
| 
								 | 
							
								[date-day-of-week]: https://hexdocs.pm/elixir/Date.html#day_of_week/2
							 |