php / php/php-src

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

未关闭
#19,684 2 条评论 0 个 reaction 已指派 1 人 在 GitHub 查看

@derickr 已经在做这个了。

开始于 2025年9月22日。

Extension: date Feature Status: Requires RFC
主要语言
C
星标
40.4k
派生
8.2k
平均合并
2 天 13 小时
30 天内合并 PR
96

描述

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

贡献指南

打开贡献指南

从这里开始

  1. 先读完整个 Issue,再读项目的贡献指南。
  2. 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
  3. Fork 仓库,在一个分支上完成修改。
  4. 提交 Pull Request,并在描述里引用这个 Issue 编号。

评估

这个 Issue 还没有评估数据。

把新 issue 发到你的邮箱

精选适合新手参与的 GitHub issue 摘要。