@@ -2889,7 +2889,7 @@ PHP_FUNCTION(date_add)
2889
2889
zval * object , * interval ;
2890
2890
php_date_obj * dateobj ;
2891
2891
php_interval_obj * intobj ;
2892
- int bias = 1 ;
2892
+ timelib_time * new_time ;
2893
2893
2894
2894
if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "OO" , & object , date_ce_date , & interval , date_ce_interval ) == FAILURE ) {
2895
2895
RETURN_FALSE ;
@@ -2899,27 +2899,9 @@ PHP_FUNCTION(date_add)
2899
2899
intobj = (php_interval_obj * ) zend_object_store_get_object (interval TSRMLS_CC );
2900
2900
DATE_CHECK_INITIALIZED (intobj -> initialized , DateInterval );
2901
2901
2902
-
2903
- if (intobj -> diff -> have_weekday_relative || intobj -> diff -> have_special_relative ) {
2904
- memcpy (& dateobj -> time -> relative , intobj -> diff , sizeof (struct timelib_rel_time ));
2905
- } else {
2906
- if (intobj -> diff -> invert ) {
2907
- bias = -1 ;
2908
- }
2909
- memset (& dateobj -> time -> relative , 0 , sizeof (struct timelib_rel_time ));
2910
- dateobj -> time -> relative .y = intobj -> diff -> y * bias ;
2911
- dateobj -> time -> relative .m = intobj -> diff -> m * bias ;
2912
- dateobj -> time -> relative .d = intobj -> diff -> d * bias ;
2913
- dateobj -> time -> relative .h = intobj -> diff -> h * bias ;
2914
- dateobj -> time -> relative .i = intobj -> diff -> i * bias ;
2915
- dateobj -> time -> relative .s = intobj -> diff -> s * bias ;
2916
- }
2917
- dateobj -> time -> have_relative = 1 ;
2918
- dateobj -> time -> sse_uptodate = 0 ;
2919
-
2920
- timelib_update_ts (dateobj -> time , NULL );
2921
- timelib_update_from_sse (dateobj -> time );
2922
- dateobj -> time -> have_relative = 0 ;
2902
+ new_time = timelib_add (dateobj -> time , intobj -> diff );
2903
+ timelib_time_dtor (dateobj -> time );
2904
+ dateobj -> time = new_time ;
2923
2905
2924
2906
RETURN_ZVAL (object , 1 , 0 );
2925
2907
}
@@ -2933,7 +2915,7 @@ PHP_FUNCTION(date_sub)
2933
2915
zval * object , * interval ;
2934
2916
php_date_obj * dateobj ;
2935
2917
php_interval_obj * intobj ;
2936
- int bias = 1 ;
2918
+ timelib_time * new_time ;
2937
2919
2938
2920
if (zend_parse_method_parameters (ZEND_NUM_ARGS () TSRMLS_CC , getThis (), "OO" , & object , date_ce_date , & interval , date_ce_interval ) == FAILURE ) {
2939
2921
RETURN_FALSE ;
@@ -2948,24 +2930,9 @@ PHP_FUNCTION(date_sub)
2948
2930
return ;
2949
2931
}
2950
2932
2951
- if (intobj -> diff -> invert ) {
2952
- bias = -1 ;
2953
- }
2954
-
2955
- memset (& dateobj -> time -> relative , 0 , sizeof (struct timelib_rel_time ));
2956
- dateobj -> time -> relative .y = 0 - (intobj -> diff -> y * bias );
2957
- dateobj -> time -> relative .m = 0 - (intobj -> diff -> m * bias );
2958
- dateobj -> time -> relative .d = 0 - (intobj -> diff -> d * bias );
2959
- dateobj -> time -> relative .h = 0 - (intobj -> diff -> h * bias );
2960
- dateobj -> time -> relative .i = 0 - (intobj -> diff -> i * bias );
2961
- dateobj -> time -> relative .s = 0 - (intobj -> diff -> s * bias );
2962
- dateobj -> time -> have_relative = 1 ;
2963
- dateobj -> time -> sse_uptodate = 0 ;
2964
-
2965
- timelib_update_ts (dateobj -> time , NULL );
2966
- timelib_update_from_sse (dateobj -> time );
2967
-
2968
- dateobj -> time -> have_relative = 0 ;
2933
+ new_time = timelib_sub (dateobj -> time , intobj -> diff );
2934
+ timelib_time_dtor (dateobj -> time );
2935
+ dateobj -> time = new_time ;
2969
2936
2970
2937
RETURN_ZVAL (object , 1 , 0 );
2971
2938
}
0 commit comments