@@ -53,9 +53,20 @@ public function getInnerDateTime(): \DateTimeImmutable
53
53
*/
54
54
public static function createFromFormat ($ format , $ time , $ timezone = null ): self
55
55
{
56
+ $ error = [];
57
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
58
+ $ error = [
59
+ 'type ' => $ errno ,
60
+ 'message ' => $ errstr ,
61
+ 'file ' => $ errfile ,
62
+ 'line ' => $ errline ,
63
+ ];
64
+ return false ;
65
+ });
56
66
$ datetime = \DateTimeImmutable::createFromFormat ($ format , $ time , $ timezone );
67
+ restore_error_handler ();
57
68
if ($ datetime === false ) {
58
- throw DatetimeException::createFromPhpError ();
69
+ throw DatetimeException::createFromPhpError ($ error );
59
70
}
60
71
return self ::createFromRegular ($ datetime );
61
72
}
@@ -67,10 +78,21 @@ public static function createFromFormat($format, $time, $timezone = null): self
67
78
*/
68
79
public function format ($ format ): string
69
80
{
81
+ $ error = [];
82
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
83
+ $ error = [
84
+ 'type ' => $ errno ,
85
+ 'message ' => $ errstr ,
86
+ 'file ' => $ errfile ,
87
+ 'line ' => $ errline ,
88
+ ];
89
+ return false ;
90
+ });
70
91
/** @var string|false $result */
71
92
$ result = $ this ->innerDateTime ->format ($ format );
93
+ restore_error_handler ();
72
94
if ($ result === false ) {
73
- throw DatetimeException::createFromPhpError ();
95
+ throw DatetimeException::createFromPhpError ($ error );
74
96
}
75
97
return $ result ;
76
98
}
@@ -83,10 +105,21 @@ public function format($format): string
83
105
*/
84
106
public function diff ($ datetime2 , $ absolute = false ): \DateInterval
85
107
{
108
+ $ error = [];
109
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
110
+ $ error = [
111
+ 'type ' => $ errno ,
112
+ 'message ' => $ errstr ,
113
+ 'file ' => $ errfile ,
114
+ 'line ' => $ errline ,
115
+ ];
116
+ return false ;
117
+ });
86
118
/** @var \DateInterval|false $result */
87
119
$ result = $ this ->innerDateTime ->diff ($ datetime2 , $ absolute );
120
+ restore_error_handler ();
88
121
if ($ result === false ) {
89
- throw DatetimeException::createFromPhpError ();
122
+ throw DatetimeException::createFromPhpError ($ error );
90
123
}
91
124
return $ result ;
92
125
}
@@ -98,10 +131,21 @@ public function diff($datetime2, $absolute = false): \DateInterval
98
131
*/
99
132
public function modify ($ modify ): self
100
133
{
134
+ $ error = [];
135
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
136
+ $ error = [
137
+ 'type ' => $ errno ,
138
+ 'message ' => $ errstr ,
139
+ 'file ' => $ errfile ,
140
+ 'line ' => $ errline ,
141
+ ];
142
+ return false ;
143
+ });
101
144
/** @var \DateTimeImmutable|false $result */
102
145
$ result = $ this ->innerDateTime ->modify ($ modify );
146
+ restore_error_handler ();
103
147
if ($ result === false ) {
104
- throw DatetimeException::createFromPhpError ();
148
+ throw DatetimeException::createFromPhpError ($ error );
105
149
}
106
150
return self ::createFromRegular ($ result ); //we have to recreate a safe datetime because modify create a new instance of \DateTimeImmutable
107
151
}
@@ -115,10 +159,21 @@ public function modify($modify): self
115
159
*/
116
160
public function setDate ($ year , $ month , $ day ): self
117
161
{
162
+ $ error = [];
163
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
164
+ $ error = [
165
+ 'type ' => $ errno ,
166
+ 'message ' => $ errstr ,
167
+ 'file ' => $ errfile ,
168
+ 'line ' => $ errline ,
169
+ ];
170
+ return false ;
171
+ });
118
172
/** @var \DateTimeImmutable|false $result */
119
173
$ result = $ this ->innerDateTime ->setDate ($ year , $ month , $ day );
174
+ restore_error_handler ();
120
175
if ($ result === false ) {
121
- throw DatetimeException::createFromPhpError ();
176
+ throw DatetimeException::createFromPhpError ($ error );
122
177
}
123
178
return self ::createFromRegular ($ result ); //we have to recreate a safe datetime because modify create a new instance of \DateTimeImmutable
124
179
}
@@ -132,10 +187,21 @@ public function setDate($year, $month, $day): self
132
187
*/
133
188
public function setISODate ($ year , $ week , $ day = 1 ): self
134
189
{
190
+ $ error = [];
191
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
192
+ $ error = [
193
+ 'type ' => $ errno ,
194
+ 'message ' => $ errstr ,
195
+ 'file ' => $ errfile ,
196
+ 'line ' => $ errline ,
197
+ ];
198
+ return false ;
199
+ });
135
200
/** @var \DateTimeImmutable|false $result */
136
201
$ result = $ this ->innerDateTime ->setISODate ($ year , $ week , $ day );
202
+ restore_error_handler ();
137
203
if ($ result === false ) {
138
- throw DatetimeException::createFromPhpError ();
204
+ throw DatetimeException::createFromPhpError ($ error );
139
205
}
140
206
return self ::createFromRegular ($ result ); //we have to recreate a safe datetime because modify create a new instance of \DateTimeImmutable
141
207
}
@@ -150,10 +216,21 @@ public function setISODate($year, $week, $day = 1): self
150
216
*/
151
217
public function setTime ($ hour , $ minute , $ second = 0 , $ microseconds = 0 ): self
152
218
{
219
+ $ error = [];
220
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
221
+ $ error = [
222
+ 'type ' => $ errno ,
223
+ 'message ' => $ errstr ,
224
+ 'file ' => $ errfile ,
225
+ 'line ' => $ errline ,
226
+ ];
227
+ return false ;
228
+ });
153
229
/** @var \DateTimeImmutable|false $result */
154
230
$ result = $ this ->innerDateTime ->setTime ($ hour , $ minute , $ second , $ microseconds );
231
+ restore_error_handler ();
155
232
if ($ result === false ) {
156
- throw DatetimeException::createFromPhpError ();
233
+ throw DatetimeException::createFromPhpError ($ error );
157
234
}
158
235
return self ::createFromRegular ($ result );
159
236
}
@@ -165,10 +242,21 @@ public function setTime($hour, $minute, $second = 0, $microseconds = 0): self
165
242
*/
166
243
public function setTimestamp ($ unixtimestamp ): self
167
244
{
245
+ $ error = [];
246
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
247
+ $ error = [
248
+ 'type ' => $ errno ,
249
+ 'message ' => $ errstr ,
250
+ 'file ' => $ errfile ,
251
+ 'line ' => $ errline ,
252
+ ];
253
+ return false ;
254
+ });
168
255
/** @var \DateTimeImmutable|false $result */
169
256
$ result = $ this ->innerDateTime ->setTimestamp ($ unixtimestamp );
257
+ restore_error_handler ();
170
258
if ($ result === false ) {
171
- throw DatetimeException::createFromPhpError ();
259
+ throw DatetimeException::createFromPhpError ($ error );
172
260
}
173
261
return self ::createFromRegular ($ result );
174
262
}
@@ -180,10 +268,21 @@ public function setTimestamp($unixtimestamp): self
180
268
*/
181
269
public function setTimezone ($ timezone ): self
182
270
{
271
+ $ error = [];
272
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
273
+ $ error = [
274
+ 'type ' => $ errno ,
275
+ 'message ' => $ errstr ,
276
+ 'file ' => $ errfile ,
277
+ 'line ' => $ errline ,
278
+ ];
279
+ return false ;
280
+ });
183
281
/** @var \DateTimeImmutable|false $result */
184
282
$ result = $ this ->innerDateTime ->setTimezone ($ timezone );
283
+ restore_error_handler ();
185
284
if ($ result === false ) {
186
- throw DatetimeException::createFromPhpError ();
285
+ throw DatetimeException::createFromPhpError ($ error );
187
286
}
188
287
return self ::createFromRegular ($ result );
189
288
}
@@ -195,10 +294,21 @@ public function setTimezone($timezone): self
195
294
*/
196
295
public function sub ($ interval ): self
197
296
{
297
+ $ error = [];
298
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
299
+ $ error = [
300
+ 'type ' => $ errno ,
301
+ 'message ' => $ errstr ,
302
+ 'file ' => $ errfile ,
303
+ 'line ' => $ errline ,
304
+ ];
305
+ return false ;
306
+ });
198
307
/** @var \DateTimeImmutable|false $result */
199
308
$ result = $ this ->innerDateTime ->sub ($ interval );
309
+ restore_error_handler ();
200
310
if ($ result === false ) {
201
- throw DatetimeException::createFromPhpError ();
311
+ throw DatetimeException::createFromPhpError ($ error );
202
312
}
203
313
return self ::createFromRegular ($ result );
204
314
}
@@ -208,10 +318,21 @@ public function sub($interval): self
208
318
*/
209
319
public function getOffset (): int
210
320
{
321
+ $ error = [];
322
+ set_error_handler (function (int $ errno , string $ errstr , string $ errfile , int $ errline ) use (&$ error ) {
323
+ $ error = [
324
+ 'type ' => $ errno ,
325
+ 'message ' => $ errstr ,
326
+ 'file ' => $ errfile ,
327
+ 'line ' => $ errline ,
328
+ ];
329
+ return false ;
330
+ });
211
331
/** @var int|false $result */
212
332
$ result = $ this ->innerDateTime ->getOffset ();
333
+ restore_error_handler ();
213
334
if ($ result === false ) {
214
- throw DatetimeException::createFromPhpError ();
335
+ throw DatetimeException::createFromPhpError ($ error );
215
336
}
216
337
return $ result ;
217
338
}
0 commit comments