@@ -4273,6 +4273,7 @@ PHP_FUNCTION(timezone_transitions_get)
4273
4273
uint64_t begin = 0 ;
4274
4274
bool found ;
4275
4275
zend_long timestamp_begin = ZEND_LONG_MIN , timestamp_end = INT32_MAX ;
4276
+ zend_long timestamp_added_last = ZEND_LONG_MIN ;
4276
4277
4277
4278
if (zend_parse_method_parameters (ZEND_NUM_ARGS (), getThis (), "O|ll" , & object , date_ce_timezone , & timestamp_begin , & timestamp_end ) == FAILURE ) {
4278
4279
RETURN_THROWS ();
@@ -4290,34 +4291,44 @@ PHP_FUNCTION(timezone_transitions_get)
4290
4291
add_assoc_long(&element, "offset", tzobj->tzi.tz->type[0].offset); \
4291
4292
add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[0].isdst); \
4292
4293
add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0].abbr_idx]); \
4293
- add_next_index_zval(return_value, &element);
4294
+ add_next_index_zval(return_value, &element); \
4295
+ timestamp_added_last = timestamp_begin;
4294
4296
4295
4297
#define add (i ,ts ) \
4296
- array_init(&element); \
4297
- add_assoc_long(&element, "ts", ts); \
4298
- add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4299
- add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \
4300
- add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \
4301
- add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]); \
4302
- add_next_index_zval(return_value, &element);
4298
+ if (timestamp_added_last != ts) { \
4299
+ array_init(&element); \
4300
+ add_assoc_long(&element, "ts", ts); \
4301
+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4302
+ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \
4303
+ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \
4304
+ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]); \
4305
+ add_next_index_zval(return_value, &element); \
4306
+ timestamp_added_last = ts; \
4307
+ }
4303
4308
4304
4309
#define add_by_index (i ,ts ) \
4305
- array_init(&element); \
4306
- add_assoc_long(&element, "ts", ts); \
4307
- add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4308
- add_assoc_long(&element, "offset", tzobj->tzi.tz->type[i].offset); \
4309
- add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[i].isdst); \
4310
- add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[i].abbr_idx]); \
4311
- add_next_index_zval(return_value, &element);
4310
+ if (timestamp_added_last != ts) { \
4311
+ array_init(&element); \
4312
+ add_assoc_long(&element, "ts", ts); \
4313
+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4314
+ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[i].offset); \
4315
+ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[i].isdst); \
4316
+ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[i].abbr_idx]); \
4317
+ add_next_index_zval(return_value, &element); \
4318
+ timestamp_added_last = ts; \
4319
+ }
4312
4320
4313
4321
#define add_from_tto (to ,ts ) \
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);
4322
+ if (timestamp_added_last != ts) { \
4323
+ array_init(&element); \
4324
+ add_assoc_long(&element, "ts", ts); \
4325
+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts, 0)); \
4326
+ add_assoc_long(&element, "offset", (to)->offset); \
4327
+ add_assoc_bool(&element, "isdst", (to)->is_dst); \
4328
+ add_assoc_string(&element, "abbr", (to)->abbr); \
4329
+ add_next_index_zval(return_value, &element); \
4330
+ timestamp_added_last = ts; \
4331
+ }
4321
4332
4322
4333
#define add_last () add(tzobj->tzi.tz->bit64.timecnt - 1, timestamp_begin)
4323
4334
0 commit comments