Hi Derick and all, strtotime() may be improved.
$ php -r "echo date('Y-m-d',strtotime('00-00-00 00:00:00'));" 1999-11-30 because 00 is 2000, 00 month is -1(=12) and 00 date is -1(last date of previous month). This is unintuitive result at a glance. strtotime() handles date/time edge cases and produces reasonable timestamp in some cases. $ php -r "echo date('Y-m-d H:i:s',strtotime('00-01-01 24:00:00'));" 2000-01-02 00:00:00 $ php -r "echo date('Y-m-d H:i:s',strtotime('03-02-29 00:00:00'));" 2003-03-01 00:00:00 $ php -r "echo date('Y-m-d H:i:s',strtotime('03-02-28 23:59:60'));" 2003-03-01 00:00:00 It returns FALSE for larger values exceeds edge cases. For example, $ php -r "var_dump(strtotime('03-02-32 00:00:00'));" bool(false) Somehow it does not accept 13 month while it is edge case. $ php -r "var_dump(strtotime('03-13-30 00:00:00'));" bool(false) It does not accept day 32 while it accepts 2/31. $ php -r "var_dump(strtotime('03-01-32 00:00:00'));" bool(false) $ php -r "var_dump(strtotime('03-02-31 00:00:00'));" int(1046617200) 25 hour/60 minutes is invalid also. $ php -r "var_dump(strtotime('03-02-31 00:60:00'));" bool(false) $ php -r "var_dump(strtotime('03-02-31 25:00:00'));" bool(false) It seems edge case handling is inconsistent. How about make strtotime() - Accept all edge cases by default. - Add $strict flag as 2nd parameter and reject any invalid date/time. (Do not allow leap second also? Some system may create 60th second) Alternatively, we may be strict - Disallow all edge cases by default. (There may be problem with leap second) Any comments? Reference: https://bugs.php.net/bug.php?id=45647 -- Yasuo Ohgaki yohg...@ohgaki.net -- PHP Internals - PHP Runtime Development Mailing List To unsubscribe, visit: http://www.php.net/unsub.php