如果DateTime对象为空

时间:2016-11-18 08:19:44

标签: php sql sql-server

我在表单提交后返回一些搜索结果。一切正常,直到我到达一个SMALLDATETIME字段并允许NULL。至少有一个返回的行将字段设置为NULL。正如您在下面的代码中看到的那样,当它不是NULL时,我将它从Date转换为String没有问题,但是我收到一条错误消息,其中包含NULL的行。

有什么想法吗?

代码:

$search_results = sqlsrv_query($database_connection, $search_results_sql, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));

if($search_results){
    $returned_rows = sqlsrv_has_rows($search_results);
    if($returned_rows === true){
        getAssetSearchData($search_results);
    }
}
function getAssetSearchData($search_results){

while($search_results_option = sqlsrv_fetch_object($search_results)){
    echo "
<tr>
        <td class='col45'>".date_format($search_results_option->HardwareAssetLastUpdateTime,"d/m/Y H:i")."</td>
        <td class='col46'>".$search_results_option->HardwareAssetLastUpdatedByName."</td>
        <td class='col47'>".date_format($search_results_option->HardwareAssetLastDiscoveryScanDate,"d/m/Y H:i")."</td></tr>";
    }
}

错误讯息:

  

警告:date_format()期望参数1为DateTimeInterface,   

中给出的null

2 个答案:

答案 0 :(得分:2)

<td>".(
   is_null($search_results_option->HardwareAssetLastDiscoveryScanDate) ? '' : 
       date_format($search_results_option->HardwareAssetLastDiscoveryScanDate,
        "d/m/Y H:i")
    )
 ."</td>";

答案 1 :(得分:1)

试试这个,

<td class='col45'>".date_format(new DateTime( $search_results_option->HardwareAssetLastUpdateTime ),"d/m/Y H:i")."</td>
<td class='col46'>".$search_results_option->HardwareAssetLastUpdatedByName."</td>
<td class='col47'>".date_format(new DateTime( $search_results_option->HardwareAssetLastDiscoveryScanDate ),"d/m/Y H:i")."</td></tr>";

date_format()在提供时需要日期为DateTime格式,您传递的是字符串。

另一件事可能是$search_results_option为空

对于NULL值:

($ search_results_option-&gt; HardwareAssetLastDiscoveryScanDate!= null?date_format(new DateTime($ search_results_option-&gt; HardwareAssetLastDiscoveryScanDate),&#34; d / m / YH:i&#34;):&#39;&#39 ;)

这将检查空值,如果它不为null,它将显示格式化的日期时间,els eit将不显示任何内容