我如何从2019-03年月中减去一个月

时间:2019-03-05 04:18:04

标签: php codeigniter date

我正在尝试从当前接收年份的月份中减去一个月( 2019-03

echo $payroll['month'];
echo $newdate = date("Y-m", strtotime("-1 months",$payroll['month']));

但由于错误而出现

2019-03

  遇到PHP错误      

严重性:通知

     

消息:遇到格式不正确的数值

我希望2019-03减去一个月,以便得到2019-02

5 个答案:

答案 0 :(得分:3)

您可以尝试以下解决方案:

date('Y-m', strtotime($payroll['month'] . ' - 1 month'))

答案 1 :(得分:2)

尝试一下-

echo $newdate = date('Y-m', strtotime('-1 months', strtotime($payroll['month'])));

答案 2 :(得分:2)

这里有很多不错的答案。

请注意,这可以使用PHP的DateTime类来完成。

$date = new DateTime("2019-03-03");
$date->sub(new DateInterval('P1M')); // P -> Period 1 Month
echo $date->format("Y-m")
// Outputs: 2019-02

strtotime()的官方文档中的简短说明。

  

注意:不能将此功能用于数学运算   可取。最好在其中使用DateTime :: add()和DateTime :: sub()   PHP 5.3和更高版本,或者PHP 5.2中的DateTime :: modify()。

答案 3 :(得分:0)

您可以再添加strtotime以获得所需的输出

$payroll['month'] = "2019-03";
echo $payroll['month'];
echo $newdate = date("Y-m", strtotime("-1 months", strtotime($payroll['month'])));

另一种方法是:

date('Y-m', strtotime($payroll['month'] . '-1 months'))

这也将为您服务。

答案 4 :(得分:0)

当心...在一个yyyy-mm字符串上简单地增加或减去一个月,在某些情况下可能会导致意外结果。 碰巧我在建造的网站上使用了这种格式(用于薪水和其他东西),并且在2月28日(IIRC)和其他极端情况下完成计算时,结果并不总是我所需要的(即,下个月或上个月)

更多代码,但是我的建议是:

$first_of_month = date('Y-m-01', strtotime($payroll['month']));
$newdate = date('Y-m', strtotime($first_of_month."-1 month"));

通过将初始值强制为一个月的第一天的完整Ymd日期(这一天与您无关,因为它仅用于计算),可以确保每次计算都正确< / p>