Annotation of embedaddon/php/ext/standard/datetime.c, revision 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>