]> granicus.if.org Git - php/commitdiff
Add strptime function.
authorSterling Hughes <sterling@php.net>
Wed, 29 Sep 2004 04:57:19 +0000 (04:57 +0000)
committerSterling Hughes <sterling@php.net>
Wed, 29 Sep 2004 04:57:19 +0000 (04:57 +0000)
configure.in
ext/standard/basic_functions.c
ext/standard/datetime.c
ext/standard/datetime.h

index 9ef5fdbae087f9114c4564adc1188c8ba55dd972..3c103e1115c55b4de90faa2fe86b7279888eba35 100644 (file)
@@ -548,6 +548,7 @@ strcoll \
 strdup \
 strerror \
 strftime \
+strptime \
 strstr \
 strtok_r \
 symlink \
index dd4299a9a353c4df9aa5a704a7b05f9081372ab9..ad5104ff5c8aae649d31dc0a880739290c7e7458 100644 (file)
@@ -170,7 +170,9 @@ function_entry basic_functions[] = {
        PHP_FE(time,                                                                                                                    NULL)
        PHP_FE(mktime,                                                                                                                  NULL)
        PHP_FE(gmmktime,                                                                                                                NULL)
-
+#if HAVE_STRPTIME
+       PHP_FE(strptime,                                                                                                                NULL)
+#endif
 #if HAVE_STRFTIME
        PHP_FE(strftime,                                                                                                                NULL)
        PHP_FE(gmstrftime,                                                                                                              NULL)
index eb025e530295637b64ad051f8c3522721e2e3844..21075cde1b45229f55f4f99bcb7ec8bfd1ff637a 100644 (file)
 
 /* $Id$ */
 
+#if HAVE_STRPTIME
+#define _XOPEN_SOURCE
+#endif
+
 #include "php.h"
 #include "zend_operators.h"
 #include "datetime.h"
@@ -1094,6 +1098,41 @@ PHP_FUNCTION(strtotime)
 }
 /* }}} */
 
+#if HAVE_STRPTIME
+/* {{{ proto string strptime(string timestamp, string format)
+   Parse a time/date generated with strftime() */
+PHP_FUNCTION(strptime)
+{
+       char      *ts;
+       int        ts_length;
+       char      *format;
+       int        format_length;
+       struct tm  parsed_time;
+       char      *unparsed_part;
+
+       if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "ss", 
+               &ts, &ts_length, &format, &format_length) == FAILURE) {
+               return;
+       }
+
+       unparsed_part = strptime(ts, format, &parsed_time);
+       if (unparsed_part == NULL) {
+               RETURN_FALSE;
+       }
+
+       array_init(return_value);
+       add_assoc_long(return_value, "tm_sec",   parsed_time.tm_sec);
+       add_assoc_long(return_value, "tm_min",   parsed_time.tm_min);
+       add_assoc_long(return_value, "tm_hour",  parsed_time.tm_hour);
+       add_assoc_long(return_value, "tm_mday",  parsed_time.tm_mday);
+       add_assoc_long(return_value, "tm_mon",   parsed_time.tm_mon);
+       add_assoc_long(return_value, "tm_year",  parsed_time.tm_year);
+       add_assoc_long(return_value, "tm_wday",  parsed_time.tm_wday);
+       add_assoc_long(return_value, "tm_yday",  parsed_time.tm_yday);
+       add_assoc_string(return_value, "unparsed", unparsed_part, 1);
+}
+/* }}} */
+#endif
 
 /*
  * Local variables:
index a08c17f7e5382adb7b2bb8993b3a92b02031d2d9..755d40611d0fe2db89646a3d61e058fc05666bae 100644 (file)
@@ -31,6 +31,9 @@ PHP_FUNCTION(gmdate);
 PHP_FUNCTION(localtime);
 PHP_FUNCTION(getdate);
 PHP_FUNCTION(checkdate);
+#if HAVE_STRPTIME
+PHP_FUNCTION(strptime);
+#endif 
 #if HAVE_STRFTIME
 PHP_FUNCTION(strftime);
 PHP_FUNCTION(gmstrftime);