php / php/php-src

strtotime() : 'first/last day of last/this/next X" gives unexpected results when X is either week or year

Ouverte
#19,684 2 commentaires 0 réactions 1 personne assignée Voir sur GitHub

@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

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Évaluation

Cette issue n'a pas encore été évaluée.

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.