【问题标题】:If DateTime Object Is Null如果 DateTime 对象为空
【发布时间】:2017-04-02 00:32:33
【问题描述】:

我在提交表单后返回了一些搜索结果。一切正常,直到我到达一个 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

【问题讨论】:

  • 你可以添加一个检查 if($search_results_option->HardwareAssetLastUpdateTime === NULL)。当您将“on update current_timestamp”标志添加到数据库中的 LastUpdateTime 时,也许它可以帮助您
  • date_format 不适用于空日期值。你应该管理这个案子

标签: php sql sql-server


【解决方案1】:
<td>".(
   is_null($search_results_option->HardwareAssetLastDiscoveryScanDate) ? '' : 
       date_format($search_results_option->HardwareAssetLastDiscoveryScanDate,
        "d/m/Y H:i")
    )
 ."</td>";

【讨论】:

    【解决方案2】:

    试试这个,

    <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->HardwareAssetLastDiscoveryScanDate != null ? date_format(new DateTime( $search_results_option->HardwareAssetLastDiscoveryScanDate ),"d/m/Y H:i") : '' )

    这将检查一个空值,如果它不为空,它将显示格式化的日期时间,否则将不显示任何内容

    【讨论】:

    • $search_results_option 对于 HardwareAssetLastDiscoveryScanDate 为空
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多