]> granicus.if.org Git - php/commitdiff
- Fixed bug #45682 (Unable to var_dump(DateInterval)).
authorDerick Rethans <derick@php.net>
Sun, 3 May 2009 18:45:06 +0000 (18:45 +0000)
committerDerick Rethans <derick@php.net>
Sun, 3 May 2009 18:45:06 +0000 (18:45 +0000)
ext/date/php_date.c
ext/date/tests/bug45682.phpt [new file with mode: 0644]

index 29ce6607d1cba221b0ad65116fa7638c833a4c4e..d04baeb778eb31c049d8337bfe9de002a7909195 100644 (file)
@@ -555,6 +555,7 @@ static zend_object_value date_object_clone_period(zval *this_ptr TSRMLS_DC);
 
 static int date_object_compare_date(zval *d1, zval *d2 TSRMLS_DC);
 static HashTable *date_object_get_properties(zval *object TSRMLS_DC);
+static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC);
 
 zval *date_interval_read_property(zval *object, zval *member, int type TSRMLS_DC);
 void date_interval_write_property(zval *object, zval *member, zval *value TSRMLS_DC);
@@ -2063,6 +2064,7 @@ static void date_register_classes(TSRMLS_D)
        date_object_handlers_interval.clone_obj = date_object_clone_interval;
        date_object_handlers_interval.read_property = date_interval_read_property;
        date_object_handlers_interval.write_property = date_interval_write_property;
+       date_object_handlers_interval.get_properties = date_object_get_properties_interval;
 
        INIT_CLASS_ENTRY(ce_period, "DatePeriod", date_funcs_period);
        ce_period.create_object = date_object_new_period;
@@ -2292,6 +2294,34 @@ static zend_object_value date_object_clone_interval(zval *this_ptr TSRMLS_DC)
        return new_ov;
 }
 
+static HashTable *date_object_get_properties_interval(zval *object TSRMLS_DC)
+{
+       HashTable *props;
+       zval *zv;
+       php_interval_obj     *intervalobj;
+
+
+       intervalobj = (php_interval_obj *) zend_object_store_get_object(object TSRMLS_CC);
+
+       props = intervalobj->std.properties;
+
+#define PHP_DATE_INTERVAL_ADD_PROPERTY(n,f) \
+       MAKE_STD_ZVAL(zv); \
+       ZVAL_LONG(zv, intervalobj->diff->f); \
+       zend_hash_update(props, n, strlen(n) + 1, &zv, sizeof(zval), NULL);
+
+       PHP_DATE_INTERVAL_ADD_PROPERTY("y", y);
+       PHP_DATE_INTERVAL_ADD_PROPERTY("m", m);
+       PHP_DATE_INTERVAL_ADD_PROPERTY("d", d);
+       PHP_DATE_INTERVAL_ADD_PROPERTY("h", h);
+       PHP_DATE_INTERVAL_ADD_PROPERTY("i", i);
+       PHP_DATE_INTERVAL_ADD_PROPERTY("s", s);
+       PHP_DATE_INTERVAL_ADD_PROPERTY("invert", invert);
+       PHP_DATE_INTERVAL_ADD_PROPERTY("days", days);
+
+       return props;
+}
+
 static inline zend_object_value date_object_new_period_ex(zend_class_entry *class_type, php_period_obj **ptr TSRMLS_DC)
 {
        php_period_obj *intern;
diff --git a/ext/date/tests/bug45682.phpt b/ext/date/tests/bug45682.phpt
new file mode 100644 (file)
index 0000000..99cbf52
--- /dev/null
@@ -0,0 +1,32 @@
+--TEST--
+Bug #45682 (Unable to var_dump(DateInterval))
+--INI--
+date.timezone=UTC
+--FILE--
+<?php
+
+$date = new DateTime("28-July-2008");
+$other = new DateTime("31-July-2008");
+
+$diff = date_diff($date, $other);
+
+var_dump($diff);
+--EXPECT--
+object(DateInterval)#3 (8) {
+  [u"y"]=>
+  int(0)
+  [u"m"]=>
+  int(0)
+  [u"d"]=>
+  int(3)
+  [u"h"]=>
+  int(0)
+  [u"i"]=>
+  int(0)
+  [u"s"]=>
+  int(0)
+  [u"invert"]=>
+  int(0)
+  [u"days"]=>
+  int(3)
+}