【问题标题】:Convert mssql datetime object to PHP string将 mssql 日期时间对象转换为 PHP 字符串
【发布时间】:2011-10-03 12:15:01
【问题描述】:

我正在从数据库中获取一些信息,记录是 MSSQL DateTime 格式,当我返回它时,它在我的数组中显示如下:

[arrayItem] => DateTime Object
    (
        [date] => 2008-06-05 09:14:11
        [timezone_type] => 3
        [timezone] => Europe/London
    )

当我尝试将其提取为数组时(即$array[arrayItem][date]),我收到错误:

致命错误:不能使用 DateTime 类型的对象作为数组

我也尝试过在将数据传递给PHP之前在SQL中格式化数据,而strtotime函数却没有任何乐趣。

任何建议都会非常受欢迎,我正在用这个撕掉我的头发!

谢谢

【问题讨论】:

    标签: php sql-server datetime


    【解决方案1】:

    当你创建查询时

    SELECT created FROM yourTable ...
    

    并且created 是 DATETIME 类型,结果是您描述的对象。要将日期部分作为字符串返回,您可以在 SQL 级别将其解决为

    SELECT CONVERT(varchar, created, 23) AS created FROM yourTable ...
    

    查看here的23个含义。

    【讨论】:

      【解决方案2】:

      由于它是一个对象,因此您无法像使用数组那样获取属性。您需要-> 符号才能访问日期。在您的问题中,好像您 var_dumped 变量 $arrayItem,所以,像这样使用它:

      $date = strtotime($array['arrayItem']->date]);
      

      【讨论】:

      • 谢谢,试过了,但不幸的是它不起作用 strtotime($array[arrayItem->date])
      • 试试strtotime($array['arrayItem']->date])
      • 非常感谢,但只是返回一个空白 - 认为有些事情搞砸了我的结局! :) Brian 的解决方案对我来说效果很好。再次感谢
      【解决方案3】:

      试试这个。它对我有用:

      $array['arrayItem']->format('Y-m-d H:i:s');
      

      参考:http://php.net/manual/en/datetime.format.php

      【讨论】:

      • 对我也很好!
      【解决方案4】:

      如果您想在 PHP 页面中显示数据,只需复制并粘贴到 <?php ?> 代码中即可:

      $serverName = "your_sqlserver";
      $username = "your_username";
      $password = "your_password";
      $database = "your_database";
      $connectionInfo = array( "UID"=>$username, "PWD"=>$password, "Database"=>$database, "ReturnDatesAsStrings"=>true);
      $connection = sqlsrv_connect($serverName, $connectionInfo);
      
      $result = sqlsrv_query( $connection,"SELECT  * from table'");
      $msrow = sqlsrv_fetch_array($result);
      
      print_r($msrow['column_name']);
      

      【讨论】:

        【解决方案5】:

        它功能强大,使用简单。

        您可以从日期对象而不是字符串转换日期 使用方法如下:

        $obj->arrayItem->format('H:i:s')
        $obj->arrayItem->format('Y-m-d')
        

        【讨论】:

          【解决方案6】:

          这也引起了我的注意。

          希望这对你有帮助:)

          http://af-design.com/blog/2010/03/13/microsoft-sql-server-driver-for-php-returns-datetime-object/

          以下是该页面内容的要点,以防链接失效。

          查询定义为datetime 的列时,native PHP SQL Server extension 返回一个字符串,而Microsoft extension 返回一个 DateTime 对象。因此,如果您需要一个字符串,则需要相应地调整您的代码。

          它继续解释说,您可以简单地在对数据库的请求中添加一个附加参数,指定您希望将日期作为字符串返回。 只需添加ReturnDatesAsStrings 参数,指定true

          例子:

          $connectionParams = array(
              'USR'=>'user',
              'PASS'=>'pass',
              'Database'='myDatabase',
              'ReturnDatesAsStrings'=>true  //<-- This is the important line
          );
          $conn = sqlsrv_connect('127.0.0.1',$connectionParams);
          

          然后您可以像通常用于您的 sqlsrv 数据库连接一样使用$conn,只有日期将作为字符串返回,而不是 DateTime 对象。

          或者,如果你想要的只是你可以调用的日期时间之外的时间戳:

          $myDateTimeObject->getTimestamp();
          

          【讨论】:

            【解决方案7】:

            这对我有用

            date('Y-m-d', strtotime($rs->Fields('time')->value)
            

            用于 MSSQL Server 上的 Adodb 连接

            【讨论】:

              【解决方案8】:

              另一种解决方案是循环。

              $_date = \DateTime::createFromFormat('D M d Y H:i:s e+', $the_date);
              foreach($_dateStart as $row){
                 echo $row; // returns 2014-06-04 15:00
                 break;     // stops at the first position
              }
              

              【讨论】:

                【解决方案9】:
                echo $array['arrayItem']->format('Y-m-d H:i:s');
                

                【讨论】:

                  【解决方案10】:

                  您应该像下面这样访问它们。关联索引arrayItem 包含一个具有一些属性的对象。

                  $array['arrayItem']->date;
                  $array['arrayItem']->timezone_type;
                  

                  【讨论】:

                  • 谢谢,但这只是返回一个 null :( $array['arrayItem']->date;
                  猜你喜欢
                  • 2016-09-07
                  • 2014-12-13
                  • 2012-10-18
                  • 1970-01-01
                  • 1970-01-01
                  • 2023-04-09
                  • 1970-01-01
                  • 2012-03-15
                  相关资源
                  最近更新 更多