如何使用 strtotime 和 date 获取相对于今天的上个月和上一年?

2023-12-09

我需要获取相对于当前日期的上个月和上一年。

但是,请参阅以下示例。

// Today is 2011-03-30
echo date('Y-m-d', strtotime('last month'));

// Output:
2011-03-02

这种行为是可以理解的(在某种程度上),因为二月和三月的天数不同,上面示例中的代码正是我所需要的,但在每月 1 日到 28 日之间只能 100% 正确运行。

那么,如何获得上个月和去年(想想date("Y-m"))以尽可能最优雅的方式,这适用于一年中的每一天?最优解将基于strtotime参数解析。

更新。稍微澄清一下要求。

我有一段代码可以获取过去几个月的一些统计信息,但我首先显示上个月的统计信息,然后在需要时加载其他月份。这就是预期目的。因此,在这个月中,我想找出应该提取哪一年的月份才能加载上个月的统计数据。

我还有一个时区感知的代码(现在并不重要),并且接受strtotime- 兼容字符串作为输入(初始化内部日期),然后允许调整日期/时间,也使用strtotime- 兼容的字符串。

我知道它可以用很少的条件和基本数学来完成,但是与此相比,这真的很混乱(当然,如果它工作正常的话):

echo tz::date('last month')->format('Y-d')

所以,我只需要上个月和上一年strtotime- 兼容时尚。

回答(谢谢,@dnagirl):

// Today is 2011-03-30
echo date('Y-m-d', strtotime('first day of last month')); // Output: 2011-02-01

看看DateTime班级。它应该正确地进行计算并且日期格式与strttotime。就像是:

$datestring='2011-03-30 first day of last month';
$dt=date_create($datestring);
echo $dt->format('Y-m'); //2011-02
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何使用 strtotime 和 date 获取相对于今天的上个月和上一年? 的相关文章

随机推荐