-
Notifications
You must be signed in to change notification settings - Fork 66
/
LocalTime.elm
125 lines (90 loc) · 2.73 KB
/
LocalTime.elm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
{-
Copyright 2020 Morgan Stanley
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-}
module Morphir.SDK.LocalTime exposing
( fromMilliseconds
, addHours
, addMinutes
, addSeconds
, diffInHours
, diffInMinutes
, diffInSeconds
, fromISO
, LocalTime
)
{-| This module adds the definition of basic time without time zones.
# Types
@docs LocalTime
# Time Math
@docs addHours
@docs addMinutes
@docs addSeconds
@docs diffInHours
@docs diffInMinutes
@docs diffInSeconds
# Constructors
@docs fromISO
@docs fromMilliseconds
-}
import Iso8601 exposing (toTime)
import Time exposing (Posix, millisToPosix, posixToMillis)
{-| Concept of time without time zones.
-}
type alias LocalTime =
Posix
{-| Add the given hours to a given time
-}
addHours : Int -> LocalTime -> LocalTime
addHours hrs time =
millisToPosix <|
posixToMillis time
+ (3600000 * hrs)
{-| Add the given minutes to a given time.
-}
addMinutes : Int -> LocalTime -> LocalTime
addMinutes minutes time =
millisToPosix <|
posixToMillis time
+ (minutes * 60000)
{-| Add the given seconds to a given time.
-}
addSeconds : Int -> LocalTime -> LocalTime
addSeconds seconds time =
millisToPosix <|
posixToMillis time
+ (seconds * 1000)
{-| Find the difference of give times in hours
-}
diffInHours : LocalTime -> LocalTime -> Int
diffInHours timeA timeB =
(posixToMillis timeA - posixToMillis timeB) // 3600000
{-| Find the difference of give times in minutes
-}
diffInMinutes : LocalTime -> LocalTime -> Int
diffInMinutes timeA timeB =
(posixToMillis timeA - posixToMillis timeB) // 60000
{-| Find the difference of give times in minutes
-}
diffInSeconds : LocalTime -> LocalTime -> Int
diffInSeconds timeA timeB =
(posixToMillis timeA - posixToMillis timeB) // 1000
{-| Construct a LocalTime based on ISO formatted string. Opportunity for error denoted by Maybe return type.
-}
fromISO : String -> Maybe LocalTime
fromISO iso =
Result.toMaybe <|
toTime iso
{-| Construct a LocalTime based on number of milliseconds from epoch. Opportunity for error denoted by Maybe return type.
-}
fromMilliseconds : Int -> LocalTime
fromMilliseconds millis =
millisToPosix millis