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
?我不确定它是否会使它变得更复杂,因为它还需要与 fpdf 和 phpSpreadsheet 一起使用,但我将这些信息包含在案例.
更新: 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函数。
当ReturnDatesAsStrings
为false
、datetime
、Date
、Time
、DateTime2
和DateTimeOffset
类型时作为 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);
?>
我正在使用 PHP 7.2, MS SQL 服务器, fpdf 和 phpSpreadsheet 来创建我的数据的 PDF 和 Excel 报告。最初我在返回报告中的时间戳(日期)字段时遇到了问题,但是在我的 connection.php 中添加 "ReturnDatesAsStrings"=>true
解决了这个问题。
现在的问题是报告中的日期字段添加了小数点和零,并显示为 2018-03-01 16:43:19.0000000
。如何停止添加 .0000000
?我不确定它是否会使它变得更复杂,因为它还需要与 fpdf 和 phpSpreadsheet 一起使用,但我将这些信息包含在案例.
更新: 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函数。
当ReturnDatesAsStrings
为false
、datetime
、Date
、Time
、DateTime2
和DateTimeOffset
类型时作为 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);
?>