Annotation of embedaddon/php/ext/standard/datetime.c, revision 1.1.1.1
1.1 misho 1: /*
2: +----------------------------------------------------------------------+
3: | PHP Version 5 |
4: +----------------------------------------------------------------------+
5: | Copyright (c) 1997-2012 The PHP Group |
6: +----------------------------------------------------------------------+
7: | This source file is subject to version 3.01 of the PHP license, |
8: | that is bundled with this package in the file LICENSE, and is |
9: | available through the world-wide-web at the following url: |
10: | http://www.php.net/license/3_01.txt |
11: | If you did not receive a copy of the PHP license and are unable to |
12: | obtain it through the world-wide-web, please send a note to |
13: | license@php.net so we can mail you a copy immediately. |
14: +----------------------------------------------------------------------+
15: | Authors: Andi Gutmans <andi@zend.com> |
16: | Zeev Suraski <zeev@zend.com> |
17: | Rasmus Lerdorf <rasmus@php.net> |
18: +----------------------------------------------------------------------+
19: */
20:
21: /* $Id: datetime.c 321634 2012-01-01 13:15:04Z felipe $ */
22:
23: #include "php.h"
24: #include "zend_operators.h"
25: #include "datetime.h"
26: #include "php_globals.h"
27:
28: #include <time.h>
29: #ifdef HAVE_SYS_TIME_H
30: # include <sys/time.h>
31: #endif
32: #include <stdio.h>
33:
34: char *mon_full_names[] = {
35: "January", "February", "March", "April",
36: "May", "June", "July", "August",
37: "September", "October", "November", "December"
38: };
39:
40: char *mon_short_names[] = {
41: "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
42: };
43:
44: char *day_full_names[] = {
45: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"
46: };
47:
48: char *day_short_names[] = {
49: "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
50: };
51:
52: /* {{{ PHPAPI char *php_std_date(time_t t TSRMLS_DC)
53: Return date string in standard format for http headers */
54: PHPAPI char *php_std_date(time_t t TSRMLS_DC)
55: {
56: struct tm *tm1, tmbuf;
57: char *str;
58:
59: tm1 = php_gmtime_r(&t, &tmbuf);
60: str = emalloc(81);
61: str[0] = '\0';
62:
63: if (!tm1) {
64: return str;
65: }
66:
67: if (PG(y2k_compliance)) {
68: snprintf(str, 80, "%s, %02d %s %04d %02d:%02d:%02d GMT",
69: day_short_names[tm1->tm_wday],
70: tm1->tm_mday,
71: mon_short_names[tm1->tm_mon],
72: tm1->tm_year + 1900,
73: tm1->tm_hour, tm1->tm_min, tm1->tm_sec);
74: } else {
75: snprintf(str, 80, "%s, %02d-%s-%02d %02d:%02d:%02d GMT",
76: day_full_names[tm1->tm_wday],
77: tm1->tm_mday,
78: mon_short_names[tm1->tm_mon],
79: ((tm1->tm_year) % 100),
80: tm1->tm_hour, tm1->tm_min, tm1->tm_sec);
81: }
82:
83: str[79] = 0;
84: return (str);
85: }
86: /* }}} */
87:
88: #if HAVE_STRPTIME
89: #ifndef HAVE_STRPTIME_DECL_FAILS
90: char *strptime(const char *s, const char *format, struct tm *tm);
91: #endif
92:
93: /* {{{ proto string strptime(string timestamp, string format)
94: Parse a time/date generated with strftime() */
95: PHP_FUNCTION(strptime)
96: {
97: char *ts;
98: int ts_length;
99: char *format;
100: int format_length;
101: struct tm parsed_time;
102: char *unparsed_part;
103:
104: if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", &ts, &ts_length, &format, &format_length) == FAILURE) {
105: return;
106: }
107:
108: memset(&parsed_time, 0, sizeof(parsed_time));
109:
110: unparsed_part = strptime(ts, format, &parsed_time);
111: if (unparsed_part == NULL) {
112: RETURN_FALSE;
113: }
114:
115: array_init(return_value);
116: add_assoc_long(return_value, "tm_sec", parsed_time.tm_sec);
117: add_assoc_long(return_value, "tm_min", parsed_time.tm_min);
118: add_assoc_long(return_value, "tm_hour", parsed_time.tm_hour);
119: add_assoc_long(return_value, "tm_mday", parsed_time.tm_mday);
120: add_assoc_long(return_value, "tm_mon", parsed_time.tm_mon);
121: add_assoc_long(return_value, "tm_year", parsed_time.tm_year);
122: add_assoc_long(return_value, "tm_wday", parsed_time.tm_wday);
123: add_assoc_long(return_value, "tm_yday", parsed_time.tm_yday);
124: add_assoc_string(return_value, "unparsed", unparsed_part, 1);
125: }
126: /* }}} */
127:
128: #endif
129:
130: /*
131: * Local variables:
132: * tab-width: 4
133: * c-basic-offset: 4
134: * End:
135: * vim600: sw=4 ts=4 fdm=marker
136: * vim<600: sw=4 ts=4
137: */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>