@@ -235,6 +235,7 @@ PHP_RSHUTDOWN_FUNCTION(date)
235
235
236
236
#define DATE_TIMEZONEDB php_date_global_timezone_db ? php_date_global_timezone_db : timelib_builtin_db()
237
237
238
+ #define DATE_FORMAT_RFC3339 "Y-m-d\\TH:i:sP"
238
239
#define DATE_FORMAT_ISO8601 "Y-m-d\\TH:i:sO"
239
240
#define DATE_FORMAT_RFC1036 "l, d-M-y H:i:s T"
240
241
#define DATE_FORMAT_RFC1123 "D, d M Y H:i:s T"
@@ -260,7 +261,7 @@ PHP_MINIT_FUNCTION(date)
260
261
#ifdef EXPERIMENTAL_DATE_SUPPORT
261
262
date_register_classes (TSRMLS_C );
262
263
#endif
263
- REGISTER_STRING_CONSTANT ("DATE_ATOM" , DATE_FORMAT_ISO8601 , CONST_CS | CONST_PERSISTENT );
264
+ REGISTER_STRING_CONSTANT ("DATE_ATOM" , DATE_FORMAT_RFC3339 , CONST_CS | CONST_PERSISTENT );
264
265
REGISTER_STRING_CONSTANT ("DATE_COOKIE" , DATE_FORMAT_RFC1123 , CONST_CS | CONST_PERSISTENT );
265
266
REGISTER_STRING_CONSTANT ("DATE_ISO8601" , DATE_FORMAT_ISO8601 , CONST_CS | CONST_PERSISTENT );
266
267
REGISTER_STRING_CONSTANT ("DATE_RFC822" , DATE_FORMAT_RFC1123 , CONST_CS | CONST_PERSISTENT );
@@ -459,6 +460,7 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
459
460
char buffer [33 ];
460
461
timelib_time_offset * offset ;
461
462
timelib_sll isoweek , isoyear ;
463
+ int rfc_colon = 0 ;
462
464
463
465
if (!format_len ) {
464
466
return estrdup ("" );
@@ -537,9 +539,11 @@ static char *date_format(char *format, int format_len, timelib_time *t, int loca
537
539
538
540
/* timezone */
539
541
case 'I' : snprintf (buffer , 32 , "%d" , localtime ? offset -> is_dst : 0 ); break ;
540
- case 'O' : snprintf (buffer , 32 , "%c%02d%02d" ,
542
+ case 'P' : rfc_colon = 1 ; /* break intentionally missing */
543
+ case 'O' : snprintf (buffer , 32 , "%c%02d%s%02d" ,
541
544
localtime ? ((offset -> offset < 0 ) ? '-' : '+' ) : '+' ,
542
545
localtime ? abs (offset -> offset / 3600 ) : 0 ,
546
+ rfc_colon ? ":" : "" ,
543
547
localtime ? abs ((offset -> offset % 3600 ) / 60 ) : 0
544
548
);
545
549
break ;
@@ -1198,14 +1202,15 @@ static void date_register_classes(TSRMLS_D)
1198
1202
#define REGISTER_DATE_CLASS_CONST_STRING (const_name , value ) \
1199
1203
zend_declare_class_constant_stringl(date_ce_date, const_name, sizeof(const_name)-1, value, sizeof(value)-1 TSRMLS_CC);
1200
1204
1201
- REGISTER_DATE_CLASS_CONST_STRING ("ATOM" , DATE_FORMAT_ISO8601 );
1205
+ REGISTER_DATE_CLASS_CONST_STRING ("ATOM" , DATE_FORMAT_RFC3339 );
1202
1206
REGISTER_DATE_CLASS_CONST_STRING ("COOKIE" , DATE_FORMAT_RFC1123 );
1203
1207
REGISTER_DATE_CLASS_CONST_STRING ("ISO8601" , DATE_FORMAT_ISO8601 );
1204
1208
REGISTER_DATE_CLASS_CONST_STRING ("RFC822" , DATE_FORMAT_RFC1123 );
1205
1209
REGISTER_DATE_CLASS_CONST_STRING ("RFC850" , DATE_FORMAT_RFC1036 );
1206
1210
REGISTER_DATE_CLASS_CONST_STRING ("RFC1036" , DATE_FORMAT_RFC1036 );
1207
1211
REGISTER_DATE_CLASS_CONST_STRING ("RFC1123" , DATE_FORMAT_RFC1123 );
1208
1212
REGISTER_DATE_CLASS_CONST_STRING ("RFC2822" , DATE_FORMAT_RFC2822 );
1213
+ REGISTER_DATE_CLASS_CONST_STRING ("RFC3339" , DATE_FORMAT_RFC3339 );
1209
1214
REGISTER_DATE_CLASS_CONST_STRING ("RSS" , DATE_FORMAT_RFC1123 );
1210
1215
REGISTER_DATE_CLASS_CONST_STRING ("W3C" , DATE_FORMAT_ISO8601 );
1211
1216
0 commit comments