strtotime() : 'first/last day of last/this/next X" gives unexpected results when X is either week or year
Open
@derickr is already working on this.
Since Sep 22, 2025.
Extension: date
Feature
Status: Requires RFC
- Dominant language
- C
- Stars
- 40.4k
- Forks
- 8.1k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 96
Description
Description
The following code:
<?php
$map = [
'first day of last week' => '2025-08-25', 'last day of last week' => '2025-08-31',
'first day of last month' => '2025-08-01', 'last day of last month'=> '2025-08-31',
'first day of last year' => '2024-01-01', 'last day of last year' => '2024-12-31',
'first day of this week' => '2025-09-01', 'last day of this week' => '2025-09-07',
'first day of this month' => '2025-09-01', 'last day of this month'=> '2025-09-30',
'first day of this year' => '2025-01-01', 'last day of this year' => '2025-12-31',
'first day of next week' => '2025-09-08', 'last day of next week' => '2025-09-14',
'first day of next month' => '2025-10-01', 'last day of next month'=> '2025-10-31',
'first day of next year' => '2026-01-01', 'last day of next year' => '2026-12-31',
];
$time = strtotime($s = 'today');
echo $s . "\t:\t" . date('Y-m-d H:i:s',$time) . PHP_EOL;
echo PHP_EOL;
echo "string\t\t\tresult" . PHP_EOL;
foreach ($map as $string => $date) {
$time = strtotime($s = $string);
echo $s . "\t" . ($d = date('Y-m-d',$time)) . "\t" . PHP_EOL;
}
<?php
Resulted in this output:
today : 2025-09-03 00:00:00
string result
first day of last week 2025-09-01
last day of last week 2025-09-30
first day of last month 2025-08-01
last day of last month 2025-08-31
first day of last year 2024-09-01
last day of last year 2024-09-30
first day of this week 2025-09-01
last day of this week 2025-09-30
first day of this month 2025-09-01
last day of this month 2025-09-30
first day of this year 2025-09-01
last day of this year 2025-09-30
first day of next week 2025-09-01
last day of next week 2025-09-30
first day of next month 2025-10-01
last day of next month 2025-10-31
first day of next year 2026-09-01
last day of next year 2026-09-30
But I expected this output instead:
today : 2025-09-03 00:00:00
string result
first day of last week 2025-08-25
last day of last week 2025-08-31
first day of last month 2025-08-01
last day of last month 2025-08-31
first day of last year 2024-01-01
last day of last year 2024-12-31
first day of this week 2025-09-01
last day of this week 2025-09-07
first day of this month 2025-09-01
last day of this month 2025-09-30
first day of this year 2025-01-01
last day of this year 2025-12-31
first day of next week 2025-09-08
last day of next week 2025-09-14
first day of next month 2025-10-01
last day of next month 2025-10-31
first day of next year 2026-01-01
last day of next year 2026-12-31
PHP Version
PHP 8.4.10
Operating System
No response
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Assessment
This issue has not been assessed yet.