ID: 12161 Updated by: joey Reported By: [EMAIL PROTECTED] Old Status: Open Status: Feedback Bug Type: Unknown/Other Function Operating System: Windows 98 PHP Version: 4.0.6 New Comment: This is not a PHP bug, it is a bug in your code, related to the use of preg_replace. Example: printdate("ddd"); You're expecting: Mon You should be getting: 7on Why? Mon is becoming date("M")on, or something like it. I don't know if this is what preg_replace SHOULD be doing or not...it seems to be making multiple passes until it can no longer replace anything. Could someone who knows about preg_replace please verify whether this is the correct behavior or not? In the meantime, I fixed the userland code so that it performs as you expected. You can find it at http://www.joeysmith.com/phpdate.phps Previous Comments: ------------------------------------------------------------------------ [2001-07-14 04:24:44] [EMAIL PROTECTED] PHP Authors, My names are James Hitz, author of http://jamhitz.tripod.com a website that provides free PHP tutorials. I was creating a tutorial on user-defined functions and was working on one that accepts a string containing a date format (eg. dd-mmm-yy) and outputs the date in the specified format. The code is as follows: <?php function printdate($subject){ $search = array( "/[d]{4}/i", "/[d]{3}/i", "/[d]{2}/i", "/[d]{1}/i", "/[m]{4}/i", "/[m]{3}/i", "/[m]{2}/i", "/[m]{1}/i", "/[y]{3,4}/i", "/[y]{1,2}/i" ); $replace = array( date("l"), date("D"), date("d"), date("j"), date("F"), date("M"), date("m"), date("n"), date("Y"), date("y") ); $newdate = preg_replace($search,$replace, $subject); //return the formatted date return $newdate; } ?> On my Win 98 (Second Edition) system running php version 4.06, I evoked the following above functrion using the following code snippet: print printdate("dddd ddd, dd d m mm mmm mmmm y yy yyy yyyy"); This produced the following output: Thurs12a01 Thu, 12 12 7 07 Jul Jul01 01 01 2001 2001 Aparrently, I expected this to have produced something like this: Thursday Thu, 12 12 7 07 Jul July 01 01 2001 2001 The parsing of the date() function seems not to act 'normal'. The documentation I have states as follows in regard to the date() function: <QUOTE> date (PHP 3, PHP 4 ) date -- Format a local time/date Description string date (string format [, int timestamp]) Returns a string formatted according to the given format string using the given timestamp or the current local time if no timestamp is given. The following characters are recognized in the format string: d - day of the month, 2 digits with leading zeros; i.e. "01" to "31" D - day of the week, textual, 3 letters; i.e. "Fri" F - month, textual, long; i.e. "January" j - day of the month without leading zeros; i.e. "1" to "31" l (lowercase 'L') - day of the week, textual, long; i.e. "Friday" m - month; i.e. "01" to "12" M - month, textual, 3 letters; i.e. "Jan" n - month without leading zeros; i.e. "1" to "12" r - RFC 822 formatted date; i.e. "Thu, 21 Dec 2000 16:01:07 +0200" Y - year, 4 digits; i.e. "1999" y - year, 2 digits; i.e. "99" z - day of the year; i.e. "0" to "365" </QUOTE> Is this a bug in the code or a bug in the documentation? Seems to me like one of those. Please advise. I am making a tutorial that will make use of the above function and would appreciate if you would tell me what to tell my audience. The tutorials I am make are very good for all - even complete beginners, so you can bundle them in your PHP distributions, or you can point users to http://jamhitz.tripod.com. All tutorials are free. Thanking you. James N. Hitz [EMAIL PROTECTED] ------------------------------------------------------------------------ Edit this bug report at http://bugs.php.net/?id=12161&edit=1 -- PHP Development Mailing List <http://www.php.net/> To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED] To contact the list administrators, e-mail: [EMAIL PROTECTED]