我将数据从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。
非常感谢帮助。 提前致谢。 问候, Ĵ
答案 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";