MSSQL объект datetime не отобразит правильную дату, если я удалю его var_dump - PullRequest
1 голос
/ 03 июля 2019

Я пытаюсь создать простую таблицу с данными за июнь 2019 года, однако у меня возникают проблемы с корректным отображением строки даты и времени MSSQL при удалении строки var_dump.

Таким образом, с помощью var_dump я получаю правильные даты, но не все мои столбцы отображаются как дата 1970 года, которой не существует, однако, когда я сначала делаю переменную даты транзакции, я получаю правильный результат во всех строках ??

Это связано со мной, когда мне нужно изменить формат строки на формат, понятный PHP?

Вот пример ввода 2016-07-04 00: 00: 00.000

Ниже мой код.

    <?php
$serverName = "SQL,1433";
$connectionInfo = array( "Database"=>"", "UID"=>"", "PWD"=>"");
$conn = sqlsrv_connect( $serverName, $connectionInfo );


$sql = "SELECT TOP 1 * FROM [all sales data]";
$stmt = sqlsrv_query( $conn, $sql);
while( $row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC) ) {
?>

<?php var_dump( $row['Transaction Date']);?>

<tr>
                    <td><?php echo $row['Order Point Account'];?></td>
                    <td><?php echo $row['Analysis Category'];?></td>
                    <td><?php echo $row['Branch Code'];?></td>
                    <td><?php echo date("d m Y", strtotime($row['Transaction Date']->date));?></td>
                    <td><?php echo $row['Product Discount Group'];?></td>
                    <td><?php echo $row['End Product Cost of Sale'];?></td>
                    <td><?php echo $row['End Product Other Value'];?></td>
                    <td><?php echo $row['End Product Sales Value'];?></td>
                    <td><?php echo $row['End Product Analysis Quantity'];?></td>
                    <td><?php echo $row['Invoice Account'];?></td>
                    <td><?php echo $row['Magic Number'];?></td>
                    <td><?php echo $row['Order Number'];?></td>
                    <td><?php echo $row['PAC Level 1'];?></td>
                    <td><?php echo $row['PAC Level 2'];?></td>
                    <td><?php echo $row['PAC Level 3'];?></td>
                    <td><?php echo $row['PAC Level 4'];?></td>
                    <td><?php echo $row['Product Code'];?></td>
                    <td><?php echo $row['Salesman 1'];?></td>
                    <td><?php echo $row['Statement Account'];?></td>
                    <td><?php echo $row['Supplier Account'];?></td>
                    <td><?php echo $row['Contact']?></td>
                    <td><?php echo $row['Order Source'];?></td>
                    <td><?php echo $row['User'];?></td>
                    <td><?php echo $row['Customer Order No'];?></td>
                </tr>

            <?php
            }
            ?>


            </tbody>
            </table>
    </body>
</html>

ниже - vardump

object (DateTime) # 1 (3) {["date"] => string (26) "2016-07-04 00: 00: 00.000000" ["timezone_type"] => int (3) ["timezone "] => string (13)" Europe / London "}

Вот результат print_r ($ row);

Массив ([Счет точки заказа] => [Категория анализа] => AD [Код отделения] => 100 [Дата транзакции] => Объект DateTime ([дата] => 2016-07-04 00: 00: 00.000000 [timezone_type] => 3 [timezone] => Европа / Лондон) [Группа скидок на товары] => [Себестоимость конечного продукта] => 165.19999694824 [Другая стоимость конечного продукта] => 165.2 [Стоимость продажи конечного продукта] => 369.60000610352 [Количество анализа конечного продукта] => 1 [Счет счета] => [Магическое число] => 800713 [Номер строки заказа на продажу] => [Номер заказа] => 319651 [Уровень PAC 1] => d [Уровень 2 PAC] => dLB [Уровень 3 PAC] => dLB01 [Уровень 4 PAC] => dLB0106 [Код продукта] => [Продавец 1] => 9500 [Счет выписки] => [Счет поставщика] => [Контакт] => факс [Источник заказа] => ФАКС [Пользователь] => [Номер заказа клиента] =>)

1 Ответ

1 голос
/ 10 июля 2019

Когда вы используете драйвер PHP для SQL Server, а не версию PDO, вы можете извлекать типы даты и времени (datetime, date, time, datetime2 и datetimeoffset) в виде строк или в качестве объектов datetime PHP, указав ReturnDatesAsStrings опция в строке подключения:

<?php 
...
$serverName = "SQL,1433";
$connectionInfo = 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( $serverName, $connectionInfo );
...
?>

По умолчанию ReturnDatesAsStrings равно false, поэтому вам просто нужно отформатировать объект datetime.

<?php
...
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC)) {
   ...
   // Format date with procedural or object oriented style:
   <td><?php echo date_format($row['Transaction Date'], 'd m Y');?></td>
   <td><?php echo $row['Transaction Date']->format('d m Y');?></td>
   ...
}
...

?>
...