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>