root/ext/standard/datetime.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. php_std_date
  2. PHP_FUNCTION

   1 /*
   2    +----------------------------------------------------------------------+
   3    | PHP Version 7                                                        |
   4    +----------------------------------------------------------------------+
   5    | Copyright (c) 1997-2016 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$ */
  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)
  53    Return date string in standard format for http headers */
  54 PHPAPI char *php_std_date(time_t t)
  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         snprintf(str, 80, "%s, %02d %s %04d %02d:%02d:%02d GMT",
  68                         day_short_names[tm1->tm_wday],
  69                         tm1->tm_mday,
  70                         mon_short_names[tm1->tm_mon],
  71                         tm1->tm_year + 1900,
  72                         tm1->tm_hour, tm1->tm_min, tm1->tm_sec);
  73 
  74         str[79] = 0;
  75         return (str);
  76 }
  77 /* }}} */
  78 
  79 #if HAVE_STRPTIME
  80 #ifndef HAVE_STRPTIME_DECL_FAILS
  81 char *strptime(const char *s, const char *format, struct tm *tm);
  82 #endif
  83 
  84 /* {{{ proto string strptime(string timestamp, string format)
  85    Parse a time/date generated with strftime() */
  86 PHP_FUNCTION(strptime)
  87 {
  88         char      *ts;
  89         size_t        ts_length;
  90         char      *format;
  91         size_t        format_length;
  92         struct tm  parsed_time;
  93         char      *unparsed_part;
  94 
  95         if (zend_parse_parameters(ZEND_NUM_ARGS(), "ss", &ts, &ts_length, &format, &format_length) == FAILURE) {
  96                 return;
  97         }
  98 
  99         memset(&parsed_time, 0, sizeof(parsed_time));
 100 
 101         unparsed_part = strptime(ts, format, &parsed_time);
 102         if (unparsed_part == NULL) {
 103                 RETURN_FALSE;
 104         }
 105 
 106         array_init(return_value);
 107         add_assoc_long(return_value, "tm_sec",   parsed_time.tm_sec);
 108         add_assoc_long(return_value, "tm_min",   parsed_time.tm_min);
 109         add_assoc_long(return_value, "tm_hour",  parsed_time.tm_hour);
 110         add_assoc_long(return_value, "tm_mday",  parsed_time.tm_mday);
 111         add_assoc_long(return_value, "tm_mon",   parsed_time.tm_mon);
 112         add_assoc_long(return_value, "tm_year",  parsed_time.tm_year);
 113         add_assoc_long(return_value, "tm_wday",  parsed_time.tm_wday);
 114         add_assoc_long(return_value, "tm_yday",  parsed_time.tm_yday);
 115         add_assoc_string(return_value, "unparsed", unparsed_part);
 116 }
 117 /* }}} */
 118 
 119 #endif
 120 
 121 /*
 122  * Local variables:
 123  * tab-width: 4
 124  * c-basic-offset: 4
 125  * End:
 126  * vim600: sw=4 ts=4 fdm=marker
 127  * vim<600: sw=4 ts=4
 128  */

/* [<][>][^][v][top][bottom][index][help] */