我有点不确定为什么这是无法找到上个月的最后一天。每一个步骤似乎是正确的工作,除了当最后一天创建。
<?php
$currentMonth = date('n');
$currentYear = date('Y');
if($currentMonth == 1) {
$lastMonth = 12;
$lastYear = $currentYear - 1;
}
else {
$lastMonth = $currentMonth -1;
$lastYear = $currentYear;
}
if($lastMonth < 10) {
$lastMonth = '0' . $lastMonth;
}
$lastDayOfMonth = date('t', $lastMonth);
$lastDateOfPreviousMonth = $lastYear . '-' . $lastMonth . '-' . $lastDayOfMonth;
$newLastDateOfMonth = date('F j, Y', strtotime($lastDateOfPreviousMonth));
?>
字符串$lastDateOfPreviousMonth
按预期返回2012-09-30;然而,在尝试将其转换为2012年9月30日之后-$newLastDateOfMonth
返回2012年10月1日。我似乎哪里出错了?
编辑:如果使用date("t/m/Y", strtotime("last month"));
或date('Y-m-d', strtotime('last day of previous month'));
,考虑到2013-01-01,其中任何一个仍然可行,即它们会考虑到年份的变化吗?
6条答案
按热度按时间zy1mlcev1#
字符串
或
型
后期编辑:php.net documentation - relative formats for strtotime(), DateTime and date_create()
xvw2m8pv2#
有一个PHP函数可以实现这个功能。
字符串
jvidinwx3#
这个月的第一天,减1秒。
字符串
例如here。
t3psigkw4#
您也可以使用
strtotime()
的零处理功能来实现这一点:字符串
因此,为了达到这个问题的目的,“上个月的最后一天”是一个简单的例子,
型
pxy2qtax5#
请尝试下面的答案。
验证码:
字符串
您将获得前12个月的最后一天。
范例:
型
输出量:
型
6l7fqoea6#
基于精度的方法(PHP 7.1+):
如果你不希望基于字符串的操作产生歧义,这里有一个替代方案,使用
DateTime
,微秒精度:字符串
扩展的解决方案(带说明):
型
解释说明
1.获取当前日期和时间
2023-12-28 22:19:57.175254
// 2023-12-01 22:19:57.175254
// 2023-12-01 00:00:00.999999
// 2023-11-30 23:59:59.999999
步骤#3和#4可以替换为:
$first_day_of_month->setTime( 0, 0, 0, -1 );
,它会自动将时间归零并减去1微秒。但是,我希望这是可以理解的,所以我将其排除在扩展解决方案之外。为什么呢?
DateTime
对象使得日期时间处理更加容易,例如,您可以 * 比较 * 两个不同的DateTime对象(例如,检查日期时间是否在一个月内)。注意事项
$today = new DateTime('now', new DateTimeZone("UTC"));