cvs: php-src /ext/date php_date.c
| From: | Derick Rethans | Date: | Mon, 28 Jan 2008 21:12:24 +0000 |
| Subject: | cvs: php-src /ext/date php_date.c | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-48067@lists.php.net to get a copy of this message | ||
derick Mon Jan 28 21:12:24 2008 UTC
Modified files:
/php-src/ext/date php_date.c
Log:
- Added two optional parameters to timezone_transitions_get() /
DateTimeZone::getTranstions() to limit the range of transitions being
returned.
http://cvs.php.net/viewvc.cgi/php-src/ext/date/php_date.c?r1=1.161&r2=1.162&diff_format=u
Index: php-src/ext/date/php_date.c
diff -u php-src/ext/date/php_date.c:1.161 php-src/ext/date/php_date.c:1.162
--- php-src/ext/date/php_date.c:1.161 Mon Jan 28 20:36:04 2008
+++ php-src/ext/date/php_date.c Mon Jan 28 21:12:24 2008
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_date.c,v 1.161 2008/01/28 20:36:04 derick Exp $ */
+/* $Id: php_date.c,v 1.162 2008/01/28 21:12:24 derick Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -2606,16 +2606,17 @@
}
/* }}} */
-/* {{{ proto array timezone_transitions_get(DateTimeZone object)
- Returns numeracilly indexed array containing associative array for all transitions for the
timezone.
+/* {{{ proto array timezone_transitions_get(DateTimeZone object [, long timestamp_begin [, long
timestamp_end ]])
+ Returns numerically indexed array containing associative array for all transitions in the
specified range for the timezone.
*/
PHP_FUNCTION(timezone_transitions_get)
{
zval *object, *element;
php_timezone_obj *tzobj;
- int i;
+ int i, first = 1;
+ long timestamp_begin = LONG_MIN, timestamp_end = LONG_MAX;
- if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O", &object,
date_ce_timezone) == FAILURE) {
+ if (zend_parse_method_parameters(ZEND_NUM_ARGS() TSRMLS_CC, getThis(), "O|ll",
&object, date_ce_timezone, ×tamp_begin, ×tamp_end) == FAILURE) {
RETURN_FALSE;
}
tzobj = (php_timezone_obj *) zend_object_store_get_object(object TSRMLS_CC);
@@ -2626,19 +2627,38 @@
array_init(return_value);
for (i = 0; i < tzobj->tzi.tz->timecnt; ++i) {
- MAKE_STD_ZVAL(element);
- array_init(element);
- add_ascii_assoc_long(element, "ts", tzobj->tzi.tz->trans[i]);
- if (UG(unicode)) {
- add_ascii_assoc_unicode(element, "time", (UChar*) php_format_date(DATE_FORMAT_ISO8601,
13, tzobj->tzi.tz->trans[i], 0 TSRMLS_CC), 0);
- } else {
- add_assoc_string(element, "time", php_format_date(DATE_FORMAT_ISO8601, 13,
tzobj->tzi.tz->trans[i], 0 TSRMLS_CC), 0);
- }
- add_ascii_assoc_long(element, "offset",
tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset);
- add_ascii_assoc_bool(element, "isdst",
tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst);
- add_ascii_assoc_ascii_string(element, "abbr",
&tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx],
1);
+ if (tzobj->tzi.tz->trans[i] >= timestamp_begin && tzobj->tzi.tz->trans[i]
< timestamp_end) {
+ if (first && timestamp_begin != LONG_MIN && i > 0 && timestamp_begin
!= tzobj->tzi.tz->trans[i])
+ {
+ MAKE_STD_ZVAL(element);
+ array_init(element);
+ add_ascii_assoc_long(element, "ts", timestamp_begin);
+ if (UG(unicode)) {
+ add_ascii_assoc_unicode(element, "time", (UChar*)
php_format_date(DATE_FORMAT_ISO8601, 13, timestamp_begin, 0 TSRMLS_CC), 0);
+ } else {
+ add_assoc_string(element, "time", php_format_date(DATE_FORMAT_ISO8601, 13,
timestamp_begin, 0 TSRMLS_CC), 0);
+ }
+ add_ascii_assoc_long(element, "offset",
tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i-1]].offset);
+ add_ascii_assoc_bool(element, "isdst",
tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i-1]].isdst);
+ add_ascii_assoc_ascii_string(element, "abbr",
&tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i-1]].abbr_idx],
1);
+
+ add_next_index_zval(return_value, element);
+ }
+ MAKE_STD_ZVAL(element);
+ array_init(element);
+ add_ascii_assoc_long(element, "ts", tzobj->tzi.tz->trans[i]);
+ if (UG(unicode)) {
+ add_ascii_assoc_unicode(element, "time", (UChar*)
php_format_date(DATE_FORMAT_ISO8601, 13, tzobj->tzi.tz->trans[i], 0 TSRMLS_CC), 0);
+ } else {
+ add_assoc_string(element, "time", php_format_date(DATE_FORMAT_ISO8601, 13,
tzobj->tzi.tz->trans[i], 0 TSRMLS_CC), 0);
+ }
+ add_ascii_assoc_long(element, "offset",
tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].offset);
+ add_ascii_assoc_bool(element, "isdst",
tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].isdst);
+ add_ascii_assoc_ascii_string(element, "abbr",
&tzobj->tzi.tz->timezone_abbr[tzobj->tzi.tz->type[tzobj->tzi.tz->trans_idx[i]].abbr_idx],
1);
- add_next_index_zval(return_value, element);
+ add_next_index_zval(return_value, element);
+ first = 0;
+ }
}
}
/* }}} */