PHP - 无法将SQL返回的数据转换为

时间:2015-07-16 14:13:59

标签: php sql-server datetime

我将数据从SQL数据库中提取到php,将它们存储在变量中并回显它们。其中一个字段是以UTC为单位的日期/时间戳,但是当我尝试将其转换为“欧洲/马耳他”时区时,转换不会发生。

SQL查询

    function getYoutubeDuration($vid) 
    {
    $videoDetails =file_get_contents("https://www.googleapis.com/youtube/v3/videos?id=".$vid."&part=contentDetails&key=AIzaSyDen99uTRRPl9VT_Ra9eAisvZSc4aZDEns");
    $videoDetails =json_decode($videoDetails, true);
    foreach ($videoDetails['items'] as $vidTime)
     {
        $youtube_time = $vidTime['contentDetails']['duration'];
        preg_match_all('/(\d+)/',$youtube_time,$parts);
        $hours = (strlen(floor($parts[0][0]/60))<1)?floor($parts[0][0]/60):'0'.floor($parts[0][0]/60);
        $minutes = $parts[0][0]%60; (strlen($parts[0][0]%60)<1)?$parts[0][0]%60:'0'.$parts[0][0]%60;
        $seconds = $parts[0][1];(strlen($parts[0][1])<1)?$parts[0][1]:'0'.$parts[0][1];
        return $hours.":".$minutes.":".$seconds;
     }
    }

  echo getYoutubeDuration('J1lb3qJgfho');

用于存储和回显变量的PHP循环:

SELECT EventId, EventTime, Individual, Tenant, TenantName, DeviceName, Comment, InetDb.dbo.Individuals.FirstName, InetDb.dbo.Individuals.LastName
                                           FROM taclogdata.dbo.Event
                                           LEFT JOIN InetDb.dbo.Tenants ON taclogdata.dbo.Event.Tenant = InetDb.dbo.Tenants.TenantId
                                           LEFT JOIN InetDb.dbo.Individuals ON taclogdata.dbo.Event.Individual = InetDb.dbo.Individuals.IndivId 
                                                 AND taclogdata.dbo.Event.Tenant = InetDb.dbo.Individuals.TenantNdx
                                           WHERE (EventTime BETWEEN DATEADD(ss, -$timeframe, GETDATE()) AND GETDATE()) 
                                                  AND (Comment = 'Reader entry' OR Comment = 'Reader exit') 
                                                  AND (InetDb.dbo.Individuals.IndivId = '$ListIndivId' 
                                                  AND InetDb.dbo.Individuals.TenantNdx = '$ListTenantId')"

我使用下面的语法来“手动”将$ EventTime中的日期/时间戳转换为马耳他时间,但由于需要手动更新,因此缺乏实用性: while($result_row = odbc_fetch_array($sql_run)){ date_default_timezone_set("Europe/Malta"); $EventTime = $result_row['EventTime']."<br>"; $Individual = $result_row['Individual']; $Tenant = $result_row['Tenant']; $TenantName = $result_row['TenantName']; $DeviceName = $result_row['DeviceName']; $Comment = $result_row['Comment']; $FirstName = $result_row['FirstName']; $LastName = $result_row['LastName']; echo '<tr> <td class="CellContent">'.$EventTime.'</td> <td class="CellContent">'.$Individual.'</td> <td class="CellContent">'.$Tenant.'</td> <td class="CellContent">'.$TenantName.'</td> <td class="CellContent">'.$DeviceName.'</td> <td class="CellContent">'.$Comment.'</td> <td class="CellContent">'.$FirstName.'</td> <td class="CellContent">'.$LastName.'</td> </tr>';

经过一些研究后,我已经包含了date_default_timezone_set函数,该函数应该将我脚本中的所有时间转换为Malta时区,但是当我回显$ EventTime时,它仍然是UTC。

非常感谢帮助。 提前致谢。 问候, Ĵ

1 个答案:

答案 0 :(得分:0)

$EventTime以字符串形式返回,您直接输出它。我没有看到任何转换。尝试将其更改为日期并更改时区。你甚至可以把它变成一个功能:

function convertDateToDisplay($EventTime){
    $utc = new DateTimeZone('UTC');
    $date = new DateTime($EventTime, $utc);
    $date->setTimezone(new DateTimeZone(date_default_timezone_get()));
    return $date->format('Y-m-d H:i:s');
}

调用的一个例子:

$EventTime = '2015-07-07 16:00';
$displayTime = convertDateToDisplay($EventTime);
echo "Event time is $EventTime Display Time is $displayTime";