Bug #75477 [Opn->Nab]: last weekday of this month returns previous month when date is set
| From: | derick@php.net | 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