Sterling Hughes wrote:

hey,

i needed strptime() for a project i'm working on, its awful handy when
you are making dates with strftime().  any objections to committing
the attached patch?

-sterling



no love for gmail attachments apparently, attached is another effort.

-sterling
? foo.diff
Index: basic_functions.c
===================================================================
RCS file: /repository/php-src/ext/standard/basic_functions.c,v
retrieving revision 1.690
diff -u -r1.690 basic_functions.c
--- basic_functions.c   26 Sep 2004 21:55:21 -0000      1.690
+++ basic_functions.c   28 Sep 2004 04:11:53 -0000
@@ -172,6 +172,7 @@
        PHP_FE(gmmktime,                                                               
                                                 NULL)
 
 #if HAVE_STRFTIME
+       PHP_FE(strptime,                                                               
                                                 NULL)
        PHP_FE(strftime,                                                               
                                                 NULL)
        PHP_FE(gmstrftime,                                                             
                                                 NULL)
 #endif
Index: datetime.c
===================================================================
RCS file: /repository/php-src/ext/standard/datetime.c,v
retrieving revision 1.123
diff -u -r1.123 datetime.c
--- datetime.c  25 Sep 2004 15:26:55 -0000      1.123
+++ datetime.c  28 Sep 2004 04:11:54 -0000
@@ -20,6 +20,10 @@
 
 /* $Id: datetime.c,v 1.123 2004/09/25 15:26:55 hyanantha Exp $ */
 
+#if HAVE_STRFTIME
+#define _XOPEN_SOURCE
+#endif
+
 #include "php.h"
 #include "zend_operators.h"
 #include "datetime.h"
@@ -1047,6 +1051,41 @@
 }
 /* }}} */
 
+/* {{{ 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);
+
+}
+/* }}} */
+
 /* {{{ proto string strftime(string format [, int timestamp])
    Format a local time/date according to locale settings */
 PHP_FUNCTION(strftime)
Index: datetime.h
===================================================================
RCS file: /repository/php-src/ext/standard/datetime.h,v
retrieving revision 1.16
diff -u -r1.16 datetime.h
--- datetime.h  8 Jan 2004 17:32:51 -0000       1.16
+++ datetime.h  28 Sep 2004 04:11:54 -0000
@@ -32,6 +32,7 @@
 PHP_FUNCTION(getdate);
 PHP_FUNCTION(checkdate);
 #if HAVE_STRFTIME
+PHP_FUNCTION(strptime);
 PHP_FUNCTION(strftime);
 PHP_FUNCTION(gmstrftime);
 #endif

-- 
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to