Skip to content

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

@Walessio

Description

@Walessio

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

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions