@@ -237,11 +237,87 @@ PHP_RSHUTDOWN_FUNCTION(date)
237
237
238
238
#define DATE_TIMEZONEDB php_date_global_timezone_db ? php_date_global_timezone_db : timelib_builtin_db()
239
239
240
+ /*
241
+ * RFC822, Section 5.1: http://www.ietf.org/rfc/rfc822.txt
242
+ * date-time = [ day "," ] date time ; dd mm yy hh:mm:ss zzz
243
+ * day = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
244
+ * date = 1*2DIGIT month 2DIGIT ; day month year e.g. 20 Jun 82
245
+ * month = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
246
+ * time = hour zone ; ANSI and Military
247
+ * hour = 2DIGIT ":" 2DIGIT [":" 2DIGIT] ; 00:00:00 - 23:59:59
248
+ * zone = "UT" / "GMT" / "EST" / "EDT" / "CST" / "CDT" / "MST" / "MDT" / "PST" / "PDT" / 1ALPHA / ( ("+" / "-") 4DIGIT )
249
+ */
250
+ #define DATE_FORMAT_RFC822 "D, d M y H:i:s O"
251
+
252
+ /*
253
+ * RFC850, Section 2.1.4: http://www.ietf.org/rfc/rfc850.txt
254
+ * Format must be acceptable both to the ARPANET and to the getdate routine.
255
+ * One format that is acceptable to both is Weekday, DD-Mon-YY HH:MM:SS TIMEZONE
256
+ * TIMEZONE can be any timezone name (3 or more letters)
257
+ */
258
+ #define DATE_FORMAT_RFC850 "l, d-M-y H:i:s T"
259
+
260
+ /*
261
+ * RFC1036, Section 2.1.2: http://www.ietf.org/rfc/rfc1036.txt
262
+ * Its format must be acceptable both in RFC-822 and to the getdate(3)
263
+ * Wdy, DD Mon YY HH:MM:SS TIMEZONE
264
+ * There is no hope of having a complete list of timezones. Universal
265
+ * Time (GMT), the North American timezones (PST, PDT, MST, MDT, CST,
266
+ * CDT, EST, EDT) and the +/-hhmm offset specifed in RFC-822 should be supported.
267
+ */
268
+ #define DATE_FORMAT_RFC1036 "D, d M y H:i:s O"
269
+
270
+ /*
271
+ * RFC1123, Section 5.2.14: http://www.ietf.org/rfc/rfc1123.txt
272
+ * RFC-822 Date and Time Specification: RFC-822 Section 5
273
+ * The syntax for the date is hereby changed to: date = 1*2DIGIT month 2*4DIGIT
274
+ */
275
+ #define DATE_FORMAT_RFC1123 "D, d M Y H:i:s O"
276
+
277
+ /*
278
+ * RFC2822, Section 3.3: http://www.ietf.org/rfc/rfc2822.txt
279
+ * FWS = ([*WSP CRLF] 1*WSP) / ; Folding white space
280
+ * CFWS = *([FWS] comment) (([FWS] comment) / FWS)
281
+ *
282
+ * date-time = [ day-of-week "," ] date FWS time [CFWS]
283
+ * day-of-week = ([FWS] day-name)
284
+ * day-name = "Mon" / "Tue" / "Wed" / "Thu" / "Fri" / "Sat" / "Sun"
285
+ * date = day month year
286
+ * year = 4*DIGIT
287
+ * month = (FWS month-name FWS)
288
+ * month-name = "Jan" / "Feb" / "Mar" / "Apr" / "May" / "Jun" / "Jul" / "Aug" / "Sep" / "Oct" / "Nov" / "Dec"
289
+ * day = ([FWS] 1*2DIGIT)
290
+ * time = time-of-day FWS zone
291
+ * time-of-day = hour ":" minute [ ":" second ]
292
+ * hour = 2DIGIT
293
+ * minute = 2DIGIT
294
+ * second = 2DIGIT
295
+ * zone = (( "+" / "-" ) 4DIGIT)
296
+ */
297
+ #define DATE_FORMAT_RFC2822 "D, d M Y H:i:s O"
298
+ /*
299
+ * RFC3339, Section 5.6: http://www.ietf.org/rfc/rfc3339.txt
300
+ * date-fullyear = 4DIGIT
301
+ * date-month = 2DIGIT ; 01-12
302
+ * date-mday = 2DIGIT ; 01-28, 01-29, 01-30, 01-31 based on month/year
303
+ *
304
+ * time-hour = 2DIGIT ; 00-23
305
+ * time-minute = 2DIGIT ; 00-59
306
+ * time-second = 2DIGIT ; 00-58, 00-59, 00-60 based on leap second rules
307
+ *
308
+ * time-secfrac = "." 1*DIGIT
309
+ * time-numoffset = ("+" / "-") time-hour ":" time-minute
310
+ * time-offset = "Z" / time-numoffset
311
+ *
312
+ * partial-time = time-hour ":" time-minute ":" time-second [time-secfrac]
313
+ * full-date = date-fullyear "-" date-month "-" date-mday
314
+ * full-time = partial-time time-offset
315
+ *
316
+ * date-time = full-date "T" full-time
317
+ */
240
318
#define DATE_FORMAT_RFC3339 "Y-m-d\\TH:i:sP"
319
+
241
320
#define DATE_FORMAT_ISO8601 "Y-m-d\\TH:i:sO"
242
- #define DATE_FORMAT_RFC1036 "l, d-M-y H:i:s T"
243
- #define DATE_FORMAT_RFC1123 "D, d M Y H:i:s T"
244
- #define DATE_FORMAT_RFC2822 "D, d M Y H:i:s O"
245
321
246
322
#define DATE_TZ_ERRMSG \
247
323
"It is not safe to rely on the system's timezone settings. Please use " \
@@ -266,8 +342,8 @@ PHP_MINIT_FUNCTION(date)
266
342
REGISTER_STRING_CONSTANT ("DATE_ATOM" , DATE_FORMAT_RFC3339 , CONST_CS | CONST_PERSISTENT );
267
343
REGISTER_STRING_CONSTANT ("DATE_COOKIE" , DATE_FORMAT_RFC1123 , CONST_CS | CONST_PERSISTENT );
268
344
REGISTER_STRING_CONSTANT ("DATE_ISO8601" , DATE_FORMAT_ISO8601 , CONST_CS | CONST_PERSISTENT );
269
- REGISTER_STRING_CONSTANT ("DATE_RFC822" , DATE_FORMAT_RFC1123 , CONST_CS | CONST_PERSISTENT );
270
- REGISTER_STRING_CONSTANT ("DATE_RFC850" , DATE_FORMAT_RFC1036 , CONST_CS | CONST_PERSISTENT );
345
+ REGISTER_STRING_CONSTANT ("DATE_RFC822" , DATE_FORMAT_RFC822 , CONST_CS | CONST_PERSISTENT );
346
+ REGISTER_STRING_CONSTANT ("DATE_RFC850" , DATE_FORMAT_RFC850 , CONST_CS | CONST_PERSISTENT );
271
347
REGISTER_STRING_CONSTANT ("DATE_RFC1036" , DATE_FORMAT_RFC1036 , CONST_CS | CONST_PERSISTENT );
272
348
REGISTER_STRING_CONSTANT ("DATE_RFC1123" , DATE_FORMAT_RFC1123 , CONST_CS | CONST_PERSISTENT );
273
349
REGISTER_STRING_CONSTANT ("DATE_RFC2822" , DATE_FORMAT_RFC2822 , CONST_CS | CONST_PERSISTENT );
@@ -1211,14 +1287,14 @@ static void date_register_classes(TSRMLS_D)
1211
1287
REGISTER_DATE_CLASS_CONST_STRING ("ATOM" , DATE_FORMAT_RFC3339 );
1212
1288
REGISTER_DATE_CLASS_CONST_STRING ("COOKIE" , DATE_FORMAT_RFC1123 );
1213
1289
REGISTER_DATE_CLASS_CONST_STRING ("ISO8601" , DATE_FORMAT_ISO8601 );
1214
- REGISTER_DATE_CLASS_CONST_STRING ("RFC822" , DATE_FORMAT_RFC1123 );
1215
- REGISTER_DATE_CLASS_CONST_STRING ("RFC850" , DATE_FORMAT_RFC1036 );
1290
+ REGISTER_DATE_CLASS_CONST_STRING ("RFC822" , DATE_FORMAT_RFC822 );
1291
+ REGISTER_DATE_CLASS_CONST_STRING ("RFC850" , DATE_FORMAT_RFC850 );
1216
1292
REGISTER_DATE_CLASS_CONST_STRING ("RFC1036" , DATE_FORMAT_RFC1036 );
1217
1293
REGISTER_DATE_CLASS_CONST_STRING ("RFC1123" , DATE_FORMAT_RFC1123 );
1218
1294
REGISTER_DATE_CLASS_CONST_STRING ("RFC2822" , DATE_FORMAT_RFC2822 );
1219
1295
REGISTER_DATE_CLASS_CONST_STRING ("RFC3339" , DATE_FORMAT_RFC3339 );
1220
1296
REGISTER_DATE_CLASS_CONST_STRING ("RSS" , DATE_FORMAT_RFC1123 );
1221
- REGISTER_DATE_CLASS_CONST_STRING ("W3C" , DATE_FORMAT_ISO8601 );
1297
+ REGISTER_DATE_CLASS_CONST_STRING ("W3C" , DATE_FORMAT_RFC3339 );
1222
1298
1223
1299
1224
1300
INIT_CLASS_ENTRY (ce_timezone , "timezone" , date_funcs_timezone );
0 commit comments