我正在尝试使用PHP和MS SQL将查询中的数据写入HTML表。我可以成功地将text,integer和float数据写入表中。但是,当我尝试格式化日期列时,整个过程似乎中断了。
<?php
echo "<table id='stakeholderTable' class='display nowrap'>
<thead>
<tr>";
foreach ($array as $colmn) {
echo '<th><strong>' . $colmn . '</strong></th>';
}
echo "</tr>
</thead>";
echo '<tbody>';
$sel_result = sqlsrv_query($con,$query);
while($sel_row = sqlsrv_fetch_array($sel_result)) {
echo '<tr>';
foreach ($array as $colmn) {
$colmn2 = str_replace("'", "", $colmn);
$joe = str_replace("tbl_actor.", "", $colmn2);
$joe = str_replace("tbl_commitment.", "", $joe);
if($joe == 'com_date' || $joe == 'com_due') {
echo '<td>' . $sel_row[$joe]->format('Y-m-d') . '</td>';
}else{
echo '<td>' . $sel_row[$joe] . '</td>';
}
}
echo '</tr>';
}
echo '</tbody>';
echo '</table>';
?>
上面的代码只要值不是日期(com_date或com_due)即可工作。如果值为日期,则表的第一行将以正确的格式打印,但随后的行将不打印,并且页面的Javascript停止工作。
问题似乎出在线路上
echo '<td>' . $sel_row[$joe]->format('Y-m-d') . '</td>';
但是我不知道这是怎么回事。
任何帮助将不胜感激
干杯
答案 0 :(得分:1)
日期可能已经是php中的字符串对象,因此您必须创建日期对象,然后格式化它们。附言:我本来会留此作为评论,但我没有足够的声誉。
答案 1 :(得分:0)
好的。弄清楚了。我正在对空单元格调用方法。在运行代码之前,我不得不检查空值。
更改:
foreach ($array as $colmn) {
$colmn2 = str_replace("'", "", $colmn);
$joe = str_replace("tbl_actor.", "", $colmn2);
$joe = str_replace("tbl_commitment.", "", $joe);
if($joe == 'com_date' || $joe == 'com_due') {
echo '<td>' . $sel_row[$joe]->format('Y-m-d') . '</td>';
}else{
echo '<td>' . $sel_row[$joe] . '</td>';
}
}
收件人:
foreach ($array as $colmn) {
$colmn2 = str_replace("'", "", $colmn);
$joe = str_replace("tbl_actor.", "", $colmn2);
$joe = str_replace("tbl_commitment.", "", $joe);
if($joe == 'com_date' || $joe == 'com_due') {
if(!empty($sel_row[$joe])){
echo '<td>' . $sel_row[$joe]->format('Y-m-d') . '</td>';
}else{
echo '<td>' . $sel_row[$joe] . '</td>';
}
}else{
echo '<td>' . $sel_row[$joe] . '</td>';
}
}
答案 2 :(得分:0)
我认为这对您有用。当您将PHP驱动程序用于SQL Server(而非PDO版本)时,可以通过在字符串中指定ReturnDatesAsStrings
选项,将retrieve date and time types(日期时间,日期,时间,日期时间2和日期时间偏移)作为字符串或PHP日期时间对象。连接字符串:
<?php
...
$server = 'server\instance,port';
$cinfo = array(
"ReturnDatesAsStrings"=>false,
# Set to TRUE if you want to get date values as string.
#"ReturnDatesAsStrings"=>true,
"Database"=>'database',
"UID"=>"username",
"PWD"=>"password"
);
$conn = sqlsrv_connect($server, $cinfo);
...
?>
默认情况下,ReturnDatesAsStrings
是false
,因此您需要格式化日期时间对象并检查null
的值。
<?php
...
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
echo is_null($row['DateField']) ? '' : date_format($row['DateField'] , 'Y-m-d');
}
...
?>
如果将ReturnDatesAsStrings
设置为true
,则不需要进行此检查,但是如果要以特定格式打印此值,则需要先将文本转换为日期。
<?php
...
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
echo $row['DateField']);
# Use this if you want to use specific date/time format.
#echo empty($row['DateField']) ? '' : date_format(date_create($row['DateField']), 'Y-m-d');
}
...
?>