计算月数并在每个月生成门票

时间:2017-06-14 07:10:18

标签: php

我正在尝试根据用户输入的开始日期和结束日期自动生成支持请求。

1我将计算2日期之间的月数,然后我会在每个月提出支持请求,直到结束日期为止。

我正在尝试这样

if($frequency=='Monthly') {

 $ts1 = strtotime($sdate);
 $ts2 = strtotime($edate);
 $year1 = date('Y', $ts1);
 $year2 = date('Y', $ts2);
 $month1 = date('m', $ts1);
 $month2 = date('m', $ts2);

 $diff = (($year2 - $year1) * 12) + ($month2 - $month1);

 for($i=1; $i<=$diff; $i++)
 {


    $time = strtotime($sdate);
    $final = date("Y-m-d", strtotime("+1 month", $time));

    $sql = mysqli_query($con, "SUPPORT REQUEST QUERY");
 }
}

例如:开始日期是2017-06-19,结束日期是2017-08-21,那么支持请求应该在2017-06-19,2017-07-19和2017年生成3次 - 08-19

plz建议如何继续

2 个答案:

答案 0 :(得分:4)

我认为没有必要计算月数,除非您想将其存储在数据库中或在某处使用它。

您可以通过以下代码从用户处获取开始日期和结束日期,并按照您想要的频率提高票证。

$startdate = "2017-06-19";//here is start date
$enddate = "2017-08-21";//end date
$tempdate = $startdate;//temporary storing start date
//comparing tempdate is not greater than end date
while(strtotime($tempdate)<=strtotime($enddate))
{
    //this is my sample code. You can replace with yours.
    echo "Raised ticket on ".$tempdate."<br/>";
    $tempdate = date('Y-m-d', strtotime("+1 month", strtotime($tempdate)));
}

<强>输出

Raised ticket on 2017-06-19
Raised ticket on 2017-07-19
Raised ticket on 2017-08-19

答案 1 :(得分:1)

试试这个

$sdate = "2017-06-19";
$edate = "2017-08-18";

$d1 = new DateTime($sdate);
$d2 = new DateTime($edate);
$diff = $d1->diff($d2)->m;

$Tickets = array($sdate);
$time = strtotime("+1 month", strtotime($sdate));

for($i=1; $i<=$diff; $i++)
{
    $Tickets[] = date("Y-m-d", $time);
    $time = strtotime("+1 month", $time);
    //$sql = mysqli_query($con, "SUPPORT REQUEST QUERY");
}

var_dump($Tickets);

现在您拥有数组$ Tickets

中的票证

EDIT;注意到如果结束日低于开始日,则使用的差异计算不起作用。更改为DateTime。
演示:https://3v4l.org/8UVRM