使用PHP (sqlsrv扩展)打印MSSQL日期时间到html时出现问题


Problem printing MSSQL datetime to html using PHP (sqlsrv extension)

我有一个灵活的代码块,允许我将查询结果打印到一个简单的html表。但是,当该表包含'datetime'类型的字段时,print()函数不起作用,循环结束。

在过去,使用PHP和MySQL(而不是Microsoft SQL Server,这是我现在使用的)打印日期没有问题,所以我不确定我现在错过了什么。

代码如下:

// $row is the current row.
// $nkeys is the array of (String) keys that correspond to columns in the table.
do {
    print ("<tr>'n");
    foreach($nkeys as $k) {
        echo ("<td>$row[$k]</td>");
    } 
    print ("</tr>'n");
} while ($row = sqlsrv_fetch_array($stmt));

除了print()或echo之外,是否有一个特殊的函数可以正确地打印日期?

SQLSRV扩展返回DateTime对象。按你喜欢的格式设置:

if( !is_null($row[$k]) ){
    echo $row[$k]->format('r');
}

在您正在使用的过程界面中,您还可以通过提供ReturnDatesAsStrings连接选项来禁用该功能(该选项在PDO界面中不可用),但通常没有理由这样做

在jqGrid中使用日期字段时,在连接字符串中包含这个非常重要。

"ReturnDatesAsStrings"=>true

好东西,谢谢Mrigesh !

在使用SQLSRV时,不能使用以下语句:

date('d/m/y', strtotime($row['ActivityDate']))

而必须使用:

date_format($row['ActivityDate'], 'd/m/y')

虽然可以通过SQLSRV更改返回日期时间对象的行为。这可以通过在连接选项中保持ReturnDatesAsStrings TRUE来实现。像下面这样改变连接代码就可以了:

$link = sqlsrv_connect( $db_server_name, array( "UID"=>$db_user,
            "PWD"=>$db_pass,
            "Database"=>$db_name,
            "ReturnDatesAsStrings"=>true
          ));

有了这个,你现有的代码echo ("<td>$row[$k]</td>");将返回值,没有任何其他的解决方案。如果你有很多地方需要使用"->format('r')"