Используйте ReturnDatesAsStrings => false
опцию подключения и date_format()
функцию PHP.
Когда ReturnDatesAsStrings
равно false
, datetime
, Date
, Time
, DateTime2
и DateTimeOffset
, типы будут возвращаться как типы PHP Datetime.Поэтому отформатируйте эти поля как даты 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);
?>