strtotime() : 'first/last day of last/this/next X" gives unexpected results when X is either week or year
Ouverte
@derickr y travaille déjà.
Depuis le 22/9/2025.
Extension: date
Feature
Status: Requires RFC
- Langage dominant
- C
- Étoiles
- 40.4k
- Forks
- 8.2k
- Merge moyen
- 2 j 15 h
- PR mergées (30 j)
- 103
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
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Évaluation
Cette issue n'a pas encore été évaluée.