@@ -4275,13 +4275,13 @@ PHP_FUNCTION(timezone_transitions_get)
42754275 RETURN_FALSE ;
42764276 }
42774277
4278- #define add_nominal ( ) \
4278+ #define add_by_index ( i , ts ) \
42794279 array_init(&element); \
4280- add_assoc_long(&element, "ts", timestamp_begin ); \
4281- add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, timestamp_begin , 0)); \
4282- add_assoc_long(&element, "offset", tzobj->tzi.tz->type[0 ].offset); \
4283- add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[0 ].isdst); \
4284- add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[0 ].abbr_idx]); \
4280+ add_assoc_long(&element, "ts", ts ); \
4281+ add_assoc_str(&element, "time", php_format_date(DATE_FORMAT_ISO8601_LARGE_YEAR, 13, ts , 0)); \
4282+ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[i ].offset); \
4283+ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[i ].isdst); \
4284+ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[i ].abbr_idx]); \
42854285 add_next_index_zval(return_value, &element);
42864286
42874287#define add (i ,ts ) \
@@ -4293,14 +4293,13 @@ PHP_FUNCTION(timezone_transitions_get)
42934293 add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]); \
42944294 add_next_index_zval(return_value, &element);
42954295
4296- #define add_by_index (i ,ts ) \
4297- array_init(& element); \
4296+ #define upd_prev (i ,ts ) \
4297+ element = *ZEND_HASH_ELEMENT(Z_ARRVAL_P(return_value), Z_ARRVAL_P(return_value)->nNumUsed-1 ); \
42984298 add_assoc_long(&element, "ts", ts); \
42994299 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);
4300+ add_assoc_long(&element, "offset", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset); \
4301+ add_assoc_bool(&element, "isdst", tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst); \
4302+ add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]);
43044303
43054304#define add_from_tto (to ,ts ) \
43064305 array_init(&element); \
@@ -4311,6 +4310,7 @@ PHP_FUNCTION(timezone_transitions_get)
43114310 add_assoc_string(&element, "abbr", (to)->abbr); \
43124311 add_next_index_zval(return_value, &element);
43134312
4313+ #define add_nominal () add_by_index(0, timestamp_begin)
43144314#define add_last () add(tzobj->tzi.tz->bit64.timecnt - 1, timestamp_begin)
43154315
43164316 array_init (return_value );
@@ -4363,10 +4363,11 @@ PHP_FUNCTION(timezone_transitions_get)
43634363
43644364 if (tzobj -> tzi .tz -> trans [i ] > timestamp_begin ) {
43654365 add (i , tzobj -> tzi .tz -> trans [i ]);
4366+ last_transition_ts = tzobj -> tzi .tz -> trans [i ];
4367+ } else {
4368+ upd_prev (i , timestamp_begin );
43664369 }
43674370 }
4368-
4369- last_transition_ts = tzobj -> tzi .tz -> trans [tzobj -> tzi .tz -> bit64 .timecnt - 1 ];
43704371 }
43714372
43724373 if (tzobj -> tzi .tz -> posix_info && tzobj -> tzi .tz -> posix_info -> dst_end ) {
0 commit comments