Php 获取给定月份的最后一天在31天的月份失败

Php 获取给定月份的最后一天在31天的月份失败,php,datetime,strtotime,Php,Datetime,Strtotime,我有这样的问题。对于给定的日期,我需要得到前几个月的最后一天,最多5个月。 例如,如果输入日期是2018-08-21,那么我想要的结果类似于2018-07-3112018-06-302018-05-3112018-04-302018-03-31 我编写了一个for循环来迭代5次,并使用下面的代码获得上个月的结果。但在31天的月份里,它并没有给出前一个月的确切数字。它给出的最后一天是2011-07-31,这是不正确的。这个有解决办法吗 $datetocheck = "2011-07-31"; $l

我有这样的问题。对于给定的日期,我需要得到前几个月的最后一天,最多5个月。 例如,如果输入日期是2018-08-21,那么我想要的结果类似于2018-07-3112018-06-302018-05-3112018-04-302018-03-31

我编写了一个for循环来迭代5次,并使用下面的代码获得上个月的结果。但在31天的月份里,它并没有给出前一个月的确切数字。它给出的最后一天是2011-07-31,这是不正确的。这个有解决办法吗

$datetocheck = "2011-07-31";
$lastday = date('Y-m-t', strtotime('-1 month', strtotime($datetocheck)));
echo $lastday; //this gives 2011-07-31(Expected value is 2011-06-30)
试试这个

echo date('2011-07-31', strtotime('last day of previous month'));
//2011-06-30

试试这个

echo date('2011-07-31', strtotime('last day of previous month'));
//2011-06-30

尝试使用DateTime类。您可以像下面这样在循环中运行它

function lastDayOfMonth($datetocheck, $noOfMonth){

    $date = new \DateTime($datetocheck);
    $month = ((int) ($date)->format('m'))-$noOfMonth;
    $year = ($date)->format('Y');

    $lastMonth = new \DateTime("{$year}-{$month}");

    $lastday = $lastMonth->format('Y-m-t');

    echo $lastday . PHP_EOL;

}

for($i = 1; $i <= 5; $i++){
    lastDayOfMonth('2011-07-31', $i);
}
尝试使用DateTime。您可以像下面这样在循环中运行它

function lastDayOfMonth($datetocheck, $noOfMonth){

    $date = new \DateTime($datetocheck);
    $month = ((int) ($date)->format('m'))-$noOfMonth;
    $year = ($date)->format('Y');

    $lastMonth = new \DateTime("{$year}-{$month}");

    $lastday = $lastMonth->format('Y-m-t');

    echo $lastday . PHP_EOL;

}

for($i = 1; $i <= 5; $i++){
    lastDayOfMonth('2011-07-31', $i);
}

简单易懂。试试这个:-

$initialDate = "2011-07-31";
for($i=1; $i<=5; $i++) {
    echo date('Y-m-d', strtotime('last day of -' . $i . ' month', strtotime($initialDate))) . "<br>";
}

检查此链接,使其简单易懂。试试这个:-

$initialDate = "2011-07-31";
for($i=1; $i<=5; $i++) {
    echo date('Y-m-d', strtotime('last day of -' . $i . ' month', strtotime($initialDate))) . "<br>";
}

检查此链接以解决该问题。您可以尝试此链接

<?php
$datetocheck = "2011-07-31";
$tmp_date = date('Y-m-01',strtotime($datetocheck));
$lastday = date('Y-m-t', strtotime('-1 month', strtotime($tmp_date)));
echo $lastday; //this value is 2011-06-30
?>

为了解决这个问题,你可以试试这个

<?php
$datetocheck = "2011-07-31";
$tmp_date = date('Y-m-01',strtotime($datetocheck));
$lastday = date('Y-m-t', strtotime('-1 month', strtotime($tmp_date)));
echo $lastday; //this value is 2011-06-30
?>

可以通过使用循环和日期时间来实现需求。如果我是正确的,请尝试

$startDate = new DateTime('2018-08-21');

$dateArr = array();

for($i=0; $i<=4; $i++) {
  $date = $startDate;

  $date->modify("last day of previous month");
  $lastDateOfMonth =  $date->format("Y-m-d");

  $dateArr[] = $lastDateOfMonth;
  $startDate = new DateTime($lastDateOfMonth);
}

$dateList = implode(",", $dateArr);

echo $dateList;

可以通过使用循环和日期时间来实现需求。如果我是正确的,请尝试

$startDate = new DateTime('2018-08-21');

$dateArr = array();

for($i=0; $i<=4; $i++) {
  $date = $startDate;

  $date->modify("last day of previous month");
  $lastDateOfMonth =  $date->format("Y-m-d");

  $dateArr[] = $lastDateOfMonth;
  $startDate = new DateTime($lastDateOfMonth);
}

$dateList = implode(",", $dateArr);

echo $dateList;

我想这只适用一次。如何在前几个月获得它?我使用for循环运行了5次,每次都给出与输出相同的日期。对于$i=0$上个月的最后一天;echo$date->formatty-m-d;回声n;}我想这只适用一次。如何在前几个月获得它?我使用for循环运行了5次,每次都给出与输出相同的日期。对于$i=0$上个月的最后一天;echo$date->formatty-m-d;回声n;}@YasiruNilan检查我的answer@YasiruNilan检查我的答案很高兴帮助你很高兴帮助你