@@ -4275,13 +4275,13 @@ PHP_FUNCTION(timezone_transitions_get)
4275
4275
RETURN_FALSE ;
4276
4276
}
4277
4277
4278
- #define add_nominal ( ) \
4278
+ #define add_by_index ( i , ts ) \
4279
4279
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]); \
4285
4285
add_next_index_zval(return_value, &element);
4286
4286
4287
4287
#define add (i ,ts ) \
@@ -4293,14 +4293,13 @@ PHP_FUNCTION(timezone_transitions_get)
4293
4293
add_assoc_string(&element, "abbr", &tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx]); \
4294
4294
add_next_index_zval(return_value, &element);
4295
4295
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 ); \
4298
4298
add_assoc_long(&element, "ts", ts); \
4299
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);
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]);
4304
4303
4305
4304
#define add_from_tto (to ,ts ) \
4306
4305
array_init(&element); \
@@ -4311,6 +4310,7 @@ PHP_FUNCTION(timezone_transitions_get)
4311
4310
add_assoc_string(&element, "abbr", (to)->abbr); \
4312
4311
add_next_index_zval(return_value, &element);
4313
4312
4313
+ #define add_nominal () add_by_index(0, timestamp_begin)
4314
4314
#define add_last () add(tzobj->tzi.tz->bit64.timecnt - 1, timestamp_begin)
4315
4315
4316
4316
array_init (return_value );
@@ -4363,10 +4363,11 @@ PHP_FUNCTION(timezone_transitions_get)
4363
4363
4364
4364
if (tzobj -> tzi .tz -> trans [i ] > timestamp_begin ) {
4365
4365
add (i , tzobj -> tzi .tz -> trans [i ]);
4366
+ last_transition_ts = tzobj -> tzi .tz -> trans [i ];
4367
+ } else {
4368
+ upd_prev (i , timestamp_begin );
4366
4369
}
4367
4370
}
4368
-
4369
- last_transition_ts = tzobj -> tzi .tz -> trans [tzobj -> tzi .tz -> bit64 .timecnt - 1 ];
4370
4371
}
4371
4372
4372
4373
if (tzobj -> tzi .tz -> posix_info && tzobj -> tzi .tz -> posix_info -> dst_end ) {
0 commit comments