Bug #67706 [Asn]: strtotime goes wrong for "last day of February next year"

From: Date: Tue, 29 Jul 2014 11:54:01 +0000
Subject: Bug #67706 [Asn]: strtotime goes wrong for "last day of February next year"
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-186862@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=67706&edit=1 ID: 67706 User updated by: greenrover33 at gmail dot com Reported by: greenrover33 at gmail dot com Summary: strtotime goes wrong for "last day of February next year" Status: Assigned Type: Bug Package: Date/time related Operating System: Linux/Independent PHP Version: 5.6Git-2014-07-29 (Git) Assigned To: derick Block user comment: N Private report: N New Comment: Workaround in PHP $string = 'last day of february next year'; $matches = array(); if (preg_match('/ of (?<month_name>january|february|march|april|may|june|july|august|september|october|november|december|jan|feb|mar|apr|may|jun|jul|aug|sep|sept|oct|nov|dec)\s*(?<year>(([0-9]{2,4})|((last|this|next|(\-[0-9]+)|(\+[0-9]+)) years?)?))?/i', $string, $matches)) { if (empty($matches['year'])) { $string .= ' ' . date('Y'); } elseif (!is_numeric($matches['year'])) { if ($now > 0) { $string = str_replace($matches['year'], date('Y', strtotime($matches['year'], $now)), $string); } else { $string = str_replace($matches['year'], date('Y', strtotime($matches['year'])), $string); } } } Previous Comments: ------------------------------------------------------------------------ [2014-07-29 10:39:57] derick@php.net You're right - this needs looking at. ------------------------------------------------------------------------ [2014-07-29 09:48:17] greenrover33 at gmail dot com I have seen this Report: https://bugs.php.net/bug.php?id=50048 But different to them is, that i give a relative year. Normaly it should translate the date first before it tries to resolve the day. ------------------------------------------------------------------------ [2014-07-29 09:42:40] greenrover33 at gmail dot com Description: ------------ strtotime goes wrong for "last day of February next year" "last day of February next year" got the 31.03 the last day of march as result. Test script: --------------- $bug_from = 1406625924; // 29.07.2014 11:25 echo strftime('%d.%m.%Y %H:%M:%S', strtotime('last day of February next year', $bug_from)); echo ' != '; echo strftime('%d.%m.%Y %H:%M:%S', strtotime('last day of February 2015', $bug_from)); die(); Expected result: ---------------- 28.02.2015 00:00:00 != 28.02.2015 00:00:00 Actual result: -------------- 31.03.2015 00:00:00 != 28.02.2015 00:00:00 ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=67706&edit=1

« previous php.bugs (#186862) next »