cvs: php-src /ext/date php_date.c /ext/date/tests bug36224.phpt
| From: | Derick Rethans | Date: | Tue, 31 Jan 2006 18:41:45 +0000 |
| Subject: | cvs: php-src /ext/date php_date.c /ext/date/tests bug36224.phpt | ||
| Groups: | php.cvs | ||
| Request: | Send a blank email to php-cvs+get-36704@lists.php.net to get a copy of this message | ||
derick Tue Jan 31 18:41:45 2006 UTC
Added files:
/php-src/ext/date/tests bug36224.phpt
Modified files:
/php-src/ext/date php_date.c
Log:
- Fixed bug #36224: date(DATE_ATOM) gives wrong results
http://cvs.php.net/viewcvs.cgi/php-src/ext/date/php_date.c?r1=1.84&r2=1.85&diff_format=u
Index: php-src/ext/date/php_date.c
diff -u php-src/ext/date/php_date.c:1.84 php-src/ext/date/php_date.c:1.85
--- php-src/ext/date/php_date.c:1.84 Sat Jan 28 06:18:18 2006
+++ php-src/ext/date/php_date.c Tue Jan 31 18:41:45 2006
@@ -16,7 +16,7 @@
+----------------------------------------------------------------------+
*/
-/* $Id: php_date.c,v 1.84 2006/01/28 06:18:18 fmk Exp $ */
+/* $Id: php_date.c,v 1.85 2006/01/31 18:41:45 derick Exp $ */
#include "php.h"
#include "php_streams.h"
@@ -241,6 +241,7 @@
#define DATE_TIMEZONEDB php_date_global_timezone_db ? php_date_global_timezone_db :
timelib_builtin_db()
+#define DATE_FORMAT_RFC3339 "Y-m-d\\TH:i:sP"
#define DATE_FORMAT_ISO8601 "Y-m-d\\TH:i:sO"
#define DATE_FORMAT_RFC1036 "l, d-M-y H:i:s T"
#define DATE_FORMAT_RFC1123 "D, d M Y H:i:s T"
@@ -266,7 +267,7 @@
date_register_classes(TSRMLS_C);
- REGISTER_STRING_CONSTANT("DATE_ATOM", DATE_FORMAT_ISO8601, CONST_CS |
CONST_PERSISTENT);
+ REGISTER_STRING_CONSTANT("DATE_ATOM", DATE_FORMAT_RFC3339, CONST_CS |
CONST_PERSISTENT);
REGISTER_STRING_CONSTANT("DATE_COOKIE", DATE_FORMAT_RFC1123, CONST_CS |
CONST_PERSISTENT);
REGISTER_STRING_CONSTANT("DATE_ISO8601", DATE_FORMAT_ISO8601, CONST_CS |
CONST_PERSISTENT);
REGISTER_STRING_CONSTANT("DATE_RFC822", DATE_FORMAT_RFC1123, CONST_CS |
CONST_PERSISTENT);
@@ -274,6 +275,7 @@
REGISTER_STRING_CONSTANT("DATE_RFC1036", DATE_FORMAT_RFC1036, CONST_CS |
CONST_PERSISTENT);
REGISTER_STRING_CONSTANT("DATE_RFC1123", DATE_FORMAT_RFC1123, CONST_CS |
CONST_PERSISTENT);
REGISTER_STRING_CONSTANT("DATE_RFC2822", DATE_FORMAT_RFC2822, CONST_CS |
CONST_PERSISTENT);
+ REGISTER_STRING_CONSTANT("DATE_RFC3339", DATE_FORMAT_RFC3339, CONST_CS |
CONST_PERSISTENT);
REGISTER_STRING_CONSTANT("DATE_RSS", DATE_FORMAT_RFC1123, CONST_CS |
CONST_PERSISTENT);
REGISTER_STRING_CONSTANT("DATE_W3C", DATE_FORMAT_ISO8601, CONST_CS |
CONST_PERSISTENT);
@@ -561,6 +563,7 @@
timelib_time_offset *offset;
timelib_sll isoweek, isoyear;
php_locale_data *loc_dat;
+ int rfc_colon = 0;
if (!format_len) {
if (UG(unicode)) {
@@ -645,9 +648,11 @@
/* timezone */
case 'I': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%d", localtime
? offset->is_dst : 0); break;
- case 'O': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%c%02d%02d",
+ case 'P': rfc_colon = 1; /* break intentionally missing */
+ case 'O': length = date_spprintf(&buffer, 32 TSRMLS_CC, "%c%02d%s%02d",
localtime ? ((offset->offset < 0) ? '-' : '+') :
'+',
localtime ? abs(offset->offset / 3600) : 0,
+ rfc_colon ? ":" : "",
localtime ? abs((offset->offset % 3600) / 60) : 0
);
break;
@@ -1326,7 +1331,7 @@
#define REGISTER_DATE_CLASS_CONST_STRING(const_name, value) \
zend_declare_class_constant_stringl(date_ce_date, const_name, sizeof(const_name)-1, value,
sizeof(value)-1 TSRMLS_CC);
- REGISTER_DATE_CLASS_CONST_STRING("ATOM", DATE_FORMAT_ISO8601);
+ REGISTER_DATE_CLASS_CONST_STRING("ATOM", DATE_FORMAT_RFC3339);
REGISTER_DATE_CLASS_CONST_STRING("COOKIE", DATE_FORMAT_RFC1123);
REGISTER_DATE_CLASS_CONST_STRING("ISO8601", DATE_FORMAT_ISO8601);
REGISTER_DATE_CLASS_CONST_STRING("RFC822", DATE_FORMAT_RFC1123);
@@ -1334,6 +1339,7 @@
REGISTER_DATE_CLASS_CONST_STRING("RFC1036", DATE_FORMAT_RFC1036);
REGISTER_DATE_CLASS_CONST_STRING("RFC1123", DATE_FORMAT_RFC1123);
REGISTER_DATE_CLASS_CONST_STRING("RFC2822", DATE_FORMAT_RFC2822);
+ REGISTER_DATE_CLASS_CONST_STRING("RFC3339", DATE_FORMAT_RFC2822);
REGISTER_DATE_CLASS_CONST_STRING("RSS", DATE_FORMAT_RFC1123);
REGISTER_DATE_CLASS_CONST_STRING("W3C", DATE_FORMAT_ISO8601);
http://cvs.php.net/viewcvs.cgi/php-src/ext/date/tests/bug36224.phpt?view=markup&rev=1.1
Index: php-src/ext/date/tests/bug36224.phpt
+++ php-src/ext/date/tests/bug36224.phpt
--TEST--
Bug #36224 (date(DATE_ATOM) gives wrong resulsts)
--FILE--
<?php
date_default_timezone_set("Europe/Oslo");
echo date(DATE_ATOM, strtotime('2006-01-31T19:23:56Z')) . "\n";
echo date(DATE_ATOM, strtotime('2006-01-31T19:23:56')) . "\n";
?>
--EXPECT--
2006-01-31T20:23:56+01:00
2006-01-31T19:23:56+01:00