ReturnDates Strings=>true returns 带小数点和零的时间戳

ReturnDatesAsStrings=>true returns timestamp with decimal & zeros

我正在使用 PHP 7.2, MS SQL 服务器, fpdf phpSpreadsheet 来创建我的数据的 PDF 和 Excel 报告。最初我在返回报告中的时间戳(日期)字段时遇到了问题,但是在我的 connection.php 中添加 "ReturnDatesAsStrings"=>true 解决了这个问题。

现在的问题是报告中的日期字段添加了小数点和零,并显示为 2018-03-01 16:43:19.0000000。如何停止添加 .0000000?我不确定它是否会使它变得更复杂,因为它还需要与 fpdfphpSpreadsheet 一起使用,但我将这些信息包含在案例.

更新: Zhorov 的第一个答案是正确的。我从 connection.php 中删除了 "ReturnDatesAsStrings"=>true 并且 phpSpreadsheet 文件工作得很好!在 fpdf 文件中,我必须添加 '$date_as_string = date_format($data['created_date'], 'Y-m-d H:i:s');'然后 PDF 也可以工作。

最终解决方案: NULL 值导致了问题,但 Zhorov 的修复有效。必须添加 $date_as_string = is_null($row['DateField']) ? '' : date_format($row['DateField'] , 'Y-m-d H:i:s');

不是 PHP 人,但在 SQL 服务器中,您可以将日期时间值转换为 字符串

例子

Select ViaConvert = convert(varchar(19),getdate(),120)
      ,ViaFormat  = format(getdate(),'yyyy-MM-dd HH:mm:ss')

Returns

ViaConvert             ViaFormat
2018-09-13 09:35:12    2018-09-13 09:35:12

请注意: 只是一个警告,format() 有一些很棒的功能,但它不是一个表演者。

使用ReturnDatesAsStrings => false连接选项和date_format()PHP函数。

ReturnDatesAsStringsfalsedatetimeDateTimeDateTime2DateTimeOffset类型时作为 PHP 日期时间类型返回。因此,将这些字段格式化为具有自定义格式的 PHP 日期。

<?php

# Connection
$server = 'server\instance,port';
$cinfo = array(
    "ReturnDatesAsStrings"=>false,
    "Database"=>'database',
    "UID"=>"uid",
    "PWD"=>"pwd"
);
$conn = sqlsrv_connect($server, $cinfo);
if( $conn === false )
{
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
}

# Statement
...
$sql = 'SELECT [DateField] FROM [Table]';
$stmt = sqlsrv_query($conn, $sql);  
if ($stmt === false) {
    echo "Error (sqlsrv_connect): ".print_r(sqlsrv_errors(), true);
    exit;
}
while($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
    $date_as_string = is_null($row['DateField']) ? '' : date_format($row['DateField'] , 'Y-m-d H:i:s');

    # I'm not familiar with PhpSpreadsheet, but based on documantation, this should work.
    $spreadsheet->getActiveSheet()->setCellValue('A'.$row , $data->OBJECTID);
    $spreadsheet->getActiveSheet()->setCellValue('B'.$row , $data->Inspector);
    $spreadsheet->getActiveSheet()->setCellValue('C'.$row , $date_as_string);

    echo $date_as_string;
    echo '</br>';
}
...

# End
sqlsrv_free_stmt($stmt);
sqlsrv_close($conn);
?>