@@ -4265,6 +4265,7 @@ PHP_FUNCTION(timezone_transitions_get)
4265
4265
uint64_t begin = 0 ;
4266
4266
bool found ;
4267
4267
zend_long timestamp_begin = ZEND_LONG_MIN , timestamp_end = INT32_MAX ;
4268
+ zend_long timestamp_added_last = ZEND_LONG_MIN ;
4268
4269
4269
4270
if (zend_parse_method_parameters (ZEND_NUM_ARGS (), getThis (), "O|ll" , & object , date_ce_timezone , & timestamp_begin , & timestamp_end ) == FAILURE ) {
4270
4271
RETURN_THROWS ();
@@ -4282,25 +4283,32 @@ PHP_FUNCTION(timezone_transitions_get)
4282
4283
add_assoc_long(&element, "offset", tzobj->tzi.tz->type[0].offset); \
4283
4284
add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[0].isdst); \
4284
4285
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
+ add_next_index_zval(return_value, &element); \
4287
+ timestamp_added_last = timestamp_begin;
4286
4288
4287
4289
#define add (i ,ts ) \
4288
- array_init_size(&element, 5); \
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);
4290
+ if (ts > timestamp_added_last) { \
4291
+ array_init_size(&element, 5); \
4292
+ add_assoc_long(&element, "ts", ts); \
4293
+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4294
+ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \
4295
+ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \
4296
+ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]); \
4297
+ add_next_index_zval(return_value, &element); \
4298
+ timestamp_added_last = ts; \
4299
+ }
4295
4300
4296
4301
#define add_by_index (i ,ts ) \
4297
- array_init_size(&element, 5); \
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);
4302
+ if (ts > timestamp_added_last) { \
4303
+ array_init_size(&element, 5); \
4304
+ add_assoc_long(&element, "ts", ts); \
4305
+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4306
+ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[i].offset); \
4307
+ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[i].isdst); \
4308
+ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[i].abbr_idx]); \
4309
+ add_next_index_zval(return_value, &element); \
4310
+ timestamp_added_last = ts; \
4311
+ }
4304
4312
4305
4313
#define add_from_tto (to ,ts ) \
4306
4314
array_init_size(&element, 5); \
0 commit comments