php / php/php-src

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

Abierto
#19,684 2 comentarios 0 reacciones 1 asignado Ver en GitHub

@derickr ya está trabajando en esto.

Desde el 22/9/2025.

Extension: date Feature Status: Requires RFC
Lenguaje dominante
C
Estrellas
40.4k
Forks
8.2k
Merge medio
2 d 13 h
PR fusionados (30 d)
96

Descripción

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

Guía de contribución

Abrir la guía de contribución

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.