转换M d, Y格式的日期导致其他行显示日期

Converting Date in M d, Y format leads to display date in other rows

我们正在获取列 "due_date" 的值并在站点中显示。

它在下面代码的帮助下工作正常。

$i = 0; 
foreach($order as $orderData) 
{ 
    $k = 0; 

    while ($k < count($orderitemsarray)) { 

        if ($orderitemsarray[$k] != '0') { 

            if($accountType == "admin") { 
                $due_date='';

                while($datas = $stmt1->fetch()) {
                    $due_date=$datas['due_date'];
                    $oDate1 = new DateTime($datas['due_date']); 
                    $sDate1 = $oDate1->format("M d, Y");
                }

                $responce[] = array( $due_date ); 

            }

            return json_encode($responce);

脚本

var colsOption = [
   {id: 'due_date' , header: " Due Date" , width :"140"},
];

我想以这种格式显示日期:

所以我尝试了下面的代码

$responce[] = array( 
   $sDate1
    );

现在它也显示其他行的日期,但对于那些其他行,数据库中没有值[截止日期]。

阅读 pastebin 后更新了代码(见下面的评论)。

            $sDate1 = '';
            while($datas = $stmt1->fetch()) {
                if ($datas['due_date'] != null) {
                    $oDate1 = new DateTime($datas['due_date']); 
                    $sDate1 = $oDate1->format("M d, Y");
                }
            }

            $responce[] = array( $sDate1 ); 

您需要申请检查空日期

 while($datas = $stmt1->fetch()) {
      $due_date=$datas['due_date'];
      if(isset($due_date)){  // Apply the check for empty if empty dont pass it to Datetime function.
      $oDate1 = new DateTime($datas['due_date']); 
      $sDate1 = $oDate1->format("M d, Y");  
      $responce[] =  $sDate1;
      }
 }`

而不是这部分...

        while($datas = $stmt1->fetch()) {
                $due_date=$datas['due_date'];
                $oDate1 = new DateTime($datas['due_date']); 
                $sDate1 = $oDate1->format("M d, Y");
            }

            $responce[] = array( $due_date ); 

        }

        return json_encode($responce);

尝试这样的事情...

        $response = array();
        ...

$i = 0; 
foreach($order as $orderData) 
{ 
$k = 0; 

while ($k < count($orderitemsarray)) { 

    if ($orderitemsarray[$k] != '0') { 

        if($accountType == "admin") { 

        while($datas = $stmt1->fetch()) {
             if(!empty($datas['due_date'])){ 
                // place the Datetime part here... in case $datas['due_date'] is empty*
                $oDate1 = new DateTime($datas['due_date']); 
                $due_date = $oDate1->format("M d, Y");
              } else {
                $due_date = "";
              } 
            }
        ...
        ...
        return json_encode($responce);
        ...

(*) 检查 Datetime here 的输出,如果 $datas['due_date'] 是 "" 或 null

在您的代码中,您正在使用循环在 $response[] 中添加值。发生的情况是 $sDate1 的值未初始化为 null。所以当它第一次被设置时它不会改变直到下一个 due_date 值出现所以它不断重复最后一个 $sDate1 值来解决这个问题,转到这个文件 http://pastebin.com/PnPnX9Wiand 下面的第 152 行初始化 $日期 1。更改此代码。

$paid_status='';
$delivery_status='';
$due_date='';

添加 $sDate1='';。它看起来像这样。

    $paid_status='';
    $delivery_status='';
    $due_date='';
    $sDate1='';

现在更改此代码。

    $due_date=$datas['due_date'];
    $oDate1 = new DateTime($datas['due_date']); 
    $sDate1 = $oDate1->format("M d, Y");

使用此代码。

$oDate1 = new DateTime($datas['due_date']);
$due_date = $oDate1->format("M d, Y");
$sDate1 = $oDate1->format("M d, Y");

您需要检查变量是否为空,然后将日期格式化为更新代码

$i = 0; 
foreach($order as $orderData) 
{ 
$k = 0; 

while ($k < count($orderitemsarray)) { 

    if ($orderitemsarray[$k] != '0') { 

        if($accountType == "admin") { 
            $due_date='';

            while($datas = $stmt1->fetch()) {
                $due_date=$datas['due_date'];
                $oDate1 = new DateTime($datas['due_date']); 
                if (!empty($oDate1))
                    $sDate1 = $oDate1->format("M d, Y");
            }

            $responce[] = array( $due_date ); 

        }

        return json_encode($responce);