Bug #75477 [Opn->Nab]: last weekday of this month returns previous month when date is set

From: Date: Tue, 06 Apr 2021 17:25:23 +0000
Subject: Bug #75477 [Opn->Nab]: last weekday of this month returns previous month when date is set
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-233233@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=75477&edit=1 ID: 75477 Updated by: derick@php.net Reported by: wouter at deinternetjongens dot nl Summary: last weekday of this month returns previous month when date is set -Status: Open +Status: Not a bug Type: Bug Package: Date/time related Operating System: Linux, mac os PHP Version: 7.1.11 Block user comment: N Private report: N New Comment: Thank you for taking the time to write to us, but this is not a bug. Please double-check the documentation available at http://www.php.net/manual/ and the instructions on how to report a bug at http://bugs.php.net/how-to-report.php This is expected behaviour, and Hannes suggestion is the right workaround. Previous Comments: ------------------------------------------------------------------------ [2017-11-27 20:59:26] vandevreken dot hannes at gmail dot com Hi! The only thing it did was: 'last weekday'. Whatever you added next, didn't have much effect (this month doesn't modify it, and is executed first). Last weekday literally means: going back in time, day by day, till a day has been found which is not a weekend day. So what you can do is this sequence of modifications: // Get the very last day in this month. $datetime->modify('last day of this month'); // Add one day: $datetime->modify('+1 day') // Find the last weekday before this day (effectively the first day of next month). $datetime->modify('last weekday'); Or: but this is very unreadable to anyone coming next: $datetime->modify(last weekday first day of next month'); This will first go to next month, then get the first day of that month, then find the last weekday before that. ------------------------------------------------------------------------ [2017-11-03 11:50:00] wouter at deinternetjonges dot nl Ok, so this is expected behaviour. What we are trying to accomplish is getting the last weekday of a month. So if it is a day between Monday till Friday I want to get the last day of those in a month. Hope you get where I want to go to with this. If it still is a feature request how can I ask for something like this to be added ? ------------------------------------------------------------------------ [2017-11-03 11:15:14] sjon at hortensius dot net This is also described in the manual: http://php.net/manual/en/datetime.formats.relative.php - so this is basically a feature request. You could use last friday of December 2017 instead, see https://3v4l.org/cVpin ------------------------------------------------------------------------ [2017-11-03 10:40:10] wouter at deinternetjongens dot nl Expected result should be : ---------------- DateTime {#12086 +"date": "2017-12-29 00:00:00.000000", +"timezone_type": 3, +"timezone": "UTC", } ------------------------------------------------------------------------ [2017-11-03 10:38:31] wouter at deinternetjongens dot nl Description: ------------ We came across a bug when trying to get the last weekday of a month. When we first setted a new date and afterwards modified it to get the last weekday of that month it returns the last weekday of the month before the month given. Test script: --------------- $datetime = new DateTime()->setDate(2017, 12, 1); var_dump($datetime->modify('last weekday this month'); Expected result: ---------------- DateTime {#12086 +"date": "2017-12-30 00:00:00.000000", +"timezone_type": 3, +"timezone": "UTC", } Actual result: -------------- DateTime {#12086 +"date": "2017-11-30 00:00:00.000000", +"timezone_type": 3, +"timezone": "UTC", } ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=75477&edit=1

« previous php.bugs (#233233) next »