@@ -4264,7 +4264,7 @@ PHP_FUNCTION(timezone_transitions_get)
4264
4264
uint64_t begin = 0 ;
4265
4265
bool found ;
4266
4266
zend_long timestamp_begin = ZEND_LONG_MIN , timestamp_end = INT32_MAX ;
4267
- zend_long timestamp_added_last = ZEND_LONG_MIN ;
4267
+ zend_long last_transition_ts = ZEND_LONG_MIN ;
4268
4268
4269
4269
if (zend_parse_method_parameters (ZEND_NUM_ARGS (), getThis (), "O|ll" , & object , date_ce_timezone , & timestamp_begin , & timestamp_end ) == FAILURE ) {
4270
4270
RETURN_THROWS ();
@@ -4282,44 +4282,34 @@ PHP_FUNCTION(timezone_transitions_get)
4282
4282
add_assoc_long(&element, "offset", tzobj->tzi.tz->type[0].offset); \
4283
4283
add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[0].isdst); \
4284
4284
add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx]); \
4285
- add_next_index_zval(return_value, &element); \
4286
- timestamp_added_last = timestamp_begin;
4285
+ add_next_index_zval(return_value, &element);
4287
4286
4288
4287
#define add (i ,ts ) \
4289
- if (ts > timestamp_added_last) { \
4290
- array_init(&element); \
4291
- add_assoc_long(&element, "ts", ts); \
4292
- add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4293
- add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \
4294
- add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \
4295
- add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]); \
4296
- add_next_index_zval(return_value, &element); \
4297
- timestamp_added_last = ts; \
4298
- }
4288
+ array_init(&element); \
4289
+ add_assoc_long(&element, "ts", ts); \
4290
+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4291
+ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \
4292
+ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \
4293
+ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]); \
4294
+ add_next_index_zval(return_value, &element);
4299
4295
4300
4296
#define add_by_index (i ,ts ) \
4301
- if (ts > timestamp_added_last) { \
4302
- array_init(&element); \
4303
- add_assoc_long(&element, "ts", ts); \
4304
- add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4305
- add_assoc_long(&element, "offset", tzobj->tzi.tz->type[i].offset); \
4306
- add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[i].isdst); \
4307
- add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[i].abbr_idx]); \
4308
- add_next_index_zval(return_value, &element); \
4309
- timestamp_added_last = ts; \
4310
- }
4297
+ array_init(&element); \
4298
+ add_assoc_long(&element, "ts", ts); \
4299
+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4300
+ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[i].offset); \
4301
+ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[i].isdst); \
4302
+ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[i].abbr_idx]); \
4303
+ add_next_index_zval(return_value, &element);
4311
4304
4312
4305
#define add_from_tto (to ,ts ) \
4313
- if (ts > timestamp_added_last) { \
4314
- array_init(&element); \
4315
- add_assoc_long(&element, "ts", ts); \
4316
- add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4317
- add_assoc_long(&element, "offset", (to)->offset); \
4318
- add_assoc_bool(&element, "isdst", (to)->is_dst); \
4319
- add_assoc_string(&element, "abbr", (to)->abbr); \
4320
- add_next_index_zval(return_value, &element); \
4321
- timestamp_added_last = ts; \
4322
- }
4306
+ array_init(&element); \
4307
+ add_assoc_long(&element, "ts", ts); \
4308
+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4309
+ add_assoc_long(&element, "offset", (to)->offset); \
4310
+ add_assoc_bool(&element, "isdst", (to)->is_dst); \
4311
+ add_assoc_string(&element, "abbr", (to)->abbr); \
4312
+ add_next_index_zval(return_value, &element);
4323
4313
4324
4314
#define add_last () add(tzobj->tzi.tz->bit64.timecnt - 1, timestamp_begin)
4325
4315
@@ -4337,8 +4327,10 @@ PHP_FUNCTION(timezone_transitions_get)
4337
4327
if (tzobj -> tzi .tz -> trans [begin ] > timestamp_begin ) {
4338
4328
if (begin > 0 ) {
4339
4329
add (begin - 1 , timestamp_begin );
4330
+ last_transition_ts = timestamp_begin ;
4340
4331
} else {
4341
4332
add_nominal ();
4333
+ last_transition_ts = timestamp_begin ;
4342
4334
}
4343
4335
found = 1 ;
4344
4336
break ;
@@ -4354,24 +4346,31 @@ PHP_FUNCTION(timezone_transitions_get)
4354
4346
timelib_time_offset * tto = timelib_get_time_zone_info (timestamp_begin , tzobj -> tzi .tz );
4355
4347
add_from_tto (tto , timestamp_begin );
4356
4348
timelib_time_offset_dtor (tto );
4349
+ last_transition_ts = timestamp_begin ;
4357
4350
} else {
4358
4351
add_last ();
4352
+ last_transition_ts = timestamp_begin ;
4359
4353
}
4360
4354
} else {
4361
4355
add_nominal ();
4356
+ last_transition_ts = timestamp_begin ;
4362
4357
}
4363
4358
} else {
4364
4359
for (uint64_t i = begin ; i < tzobj -> tzi .tz -> bit64 .timecnt ; ++ i ) {
4365
- if (tzobj -> tzi .tz -> trans [i ] < timestamp_end ) {
4366
- add (i , tzobj -> tzi .tz -> trans [i ]);
4367
- } else {
4360
+ if (tzobj -> tzi .tz -> trans [i ] > timestamp_end ) {
4368
4361
return ;
4369
4362
}
4363
+
4364
+ if (tzobj -> tzi .tz -> trans [i ] > timestamp_begin ) {
4365
+ add (i , tzobj -> tzi .tz -> trans [i ]);
4366
+ }
4370
4367
}
4368
+
4369
+ last_transition_ts = tzobj -> tzi .tz -> trans [tzobj -> tzi .tz -> bit64 .timecnt - 1 ];
4371
4370
}
4371
+
4372
4372
if (tzobj -> tzi .tz -> posix_info && tzobj -> tzi .tz -> posix_info -> dst_end ) {
4373
4373
timelib_sll start_y , end_y , dummy_m , dummy_d ;
4374
- timelib_sll last_transition_ts = tzobj -> tzi .tz -> trans [tzobj -> tzi .tz -> bit64 .timecnt - 1 ];
4375
4374
4376
4375
/* Find out year for last transition */
4377
4376
timelib_unixtime2date (last_transition_ts , & start_y , & dummy_m , & dummy_d );
0 commit comments