13
13
14
14
namespace Laudis \Neo4j \Formatter \Specialised ;
15
15
16
+ use function count ;
17
+ use function date_get_last_errors ;
16
18
use DateInterval ;
17
19
use DateTimeImmutable ;
18
20
use Exception ;
19
21
use function explode ;
20
22
use Iterator ;
23
+ use function json_encode ;
24
+ use const JSON_THROW_ON_ERROR ;
25
+ use JsonException ;
21
26
use Laudis \Neo4j \Types \Date ;
22
27
use Laudis \Neo4j \Types \DateTime ;
23
28
use Laudis \Neo4j \Types \Duration ;
24
29
use Laudis \Neo4j \Types \LocalDateTime ;
25
30
use Laudis \Neo4j \Types \LocalTime ;
26
31
use Laudis \Neo4j \Types \Time ;
32
+ use RuntimeException ;
27
33
use function str_pad ;
28
34
use function substr ;
29
35
@@ -101,11 +107,17 @@ private function translateDuration(string $value): Duration
101
107
return new Duration ($ months , $ days , $ seconds , $ nanoseconds );
102
108
}
103
109
110
+ /**
111
+ * @throws JsonException
112
+ */
104
113
private function translateDate (string $ value ): Date
105
114
{
106
115
$ epoch = new DateTimeImmutable ('@0 ' );
107
- /** @psalm-suppress PossiblyFalseReference */
108
- $ diff = DateTimeImmutable::createFromFormat ('Y-m-d ' , $ value )->diff ($ epoch );
116
+ $ date = DateTimeImmutable::createFromFormat ('Y-m-d ' , $ value );
117
+ if ($ date === false ) {
118
+ throw new RuntimeException (json_encode (date_get_last_errors (), JSON_THROW_ON_ERROR ));
119
+ }
120
+ $ diff = $ date ->diff ($ epoch );
109
121
110
122
return new Date ((int ) $ diff ->format ('%a ' ));
111
123
}
@@ -119,6 +131,9 @@ private function translateTime(string $value): Time
119
131
return new Time (((int ) $ values [0 ]) * 60 * 60 + ((int ) $ values [1 ]) * 60 );
120
132
}
121
133
134
+ /**
135
+ * @throws Exception
136
+ */
122
137
private function translateDateTime (string $ value ): DateTime
123
138
{
124
139
[$ date , $ time ] = explode ('T ' , $ value );
@@ -131,34 +146,41 @@ private function translateDateTime(string $value): DateTime
131
146
[$ time , $ milliseconds ] = explode ('. ' , $ time );
132
147
133
148
$ date = DateTimeImmutable::createFromFormat ('Y-m-d H:i:s ' , $ date .' ' .$ time );
149
+ if ($ date === false ) {
150
+ throw new RuntimeException (json_encode (date_get_last_errors (), JSON_THROW_ON_ERROR ));
151
+ }
134
152
135
153
if ($ tz !== null ) {
136
- /** @psalm-suppress PossiblyFalseReference */
137
154
return new DateTime ($ date ->getTimestamp (), (int ) $ milliseconds * 1000000 , $ tz );
138
155
}
139
156
140
- /** @psalm-suppress PossiblyFalseReference */
141
157
return new DateTime ($ date ->getTimestamp (), (int ) $ milliseconds * 1000000 , 0 );
142
158
}
143
159
160
+ /**
161
+ * @throws JsonException
162
+ */
144
163
private function translateLocalDateTime (string $ value ): LocalDateTime
145
164
{
146
165
[$ date , $ time ] = explode ('T ' , $ value );
147
166
[$ time , $ milliseconds ] = explode ('. ' , $ time );
148
167
149
168
$ date = DateTimeImmutable::createFromFormat ('Y-m-d H:i:s ' , $ date .' ' .$ time );
169
+ if ($ date === false ) {
170
+ throw new RuntimeException (json_encode (date_get_last_errors (), JSON_THROW_ON_ERROR ));
171
+ }
150
172
151
- /** @psalm-suppress PossiblyFalseReference */
152
173
return new LocalDateTime ($ date ->getTimestamp (), (int ) $ milliseconds * 1000000 );
153
174
}
154
175
155
176
/**
156
177
* @psalm-suppress all
178
+ *
179
+ * @throws Exception
157
180
*/
158
181
private function translateLocalTime (string $ value ): LocalTime
159
182
{
160
- $ date = new DateTimeImmutable ($ value );
161
- $ timestamp = $ date ->getTimestamp ();
183
+ $ timestamp = (new DateTimeImmutable ($ value ))->getTimestamp ();
162
184
163
185
$ hours = (int ) date ('H ' , $ timestamp );
164
186
$ minutes = (int ) date ('i ' , $ timestamp );
0 commit comments