【发布时间】:2011-03-30 16:56:05
【问题描述】:
我需要获取相对于当前日期的上个月和年份。
但是,请参阅以下示例。
// Today is 2011-03-30
echo date('Y-m-d', strtotime('last month'));
// Output:
2011-03-02
这种行为是可以理解的(在某种程度上),由于 2 月和 3 月的天数不同,上面示例中的代码是我需要的,但在每个月的 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
【问题讨论】:
-
你想要的只是月份和年份?没有一天?
-
您能否准确说明您想要的输入/输出和预期行为?
-
date("m-Y", strtotime("-1 月"));会解决这个问题
-
@Varshaan 感谢您的评论!请不要通过 cmets 提出解决方案,而是创建一个答案。这样就可以围绕您的答案展开对话,并收集选票。
-
@mr.b 同意并已发布为答案