2017-06-15 57 views
0

我想将我的网站的时区设置为欧洲/布鲁塞尔。 我做了一个小的PHP文件:设置时区问题

<?php 
$DT = new DateTime($timestamp,new DateTimeZone('UTC')); 
$DT->setTimezone(new DateTimeZone('Europe/Brussels')); 
$date = $DT->format('Y-m-d H:i:s'); 
?> 

我已经包含在其他PHP文件这个文件。 我遇到的问题是我在我的mysql上放了一个时间戳 比我在其他文件中用预处理语句PDO调用此时间戳 但即使如此,我在每个页面上设置了新的默认时间, “M使用日期并没有得到调整。

正如我不能在MySQL的时区变化,由于他们建议我用上面的脚本我的供应商的限制。但是,这是行不通的。

我在做什么错了?

+0

请更新您的问题,并压平'与实际的时刻$ timestamp'然后上传您从'var_export得到什么($日期);'和你期待的。 – mkaatman

+0

“上面的脚本”只是一个建议。这只是为DateTime类的一个实例设置时区,而不是以任何方式全局设置。他们建议在任何地方使用日期,将该日期实例化到DateTime对象中,然后设置您选择的时区。这不是你会包含在所有文件中的东西。 –

回答

1

你可能已经改变了你的默认时区在PHP中,但你也需要改变它为你的MySQL以及MySQL生成的时间戳将基于为MySQL设置的时区。

这里有一个如何你的MySQL时区与你的PHP时区同步的例子:

<?php 
$now = new DateTime(); 
$mins = $now->getOffset()/60; 
$sgn = ($mins < 0 ? -1 : 1); 
$mins = abs($mins); 
$hrs = floor($mins/60); 
$mins -= $hrs * 60; 
$offset = sprintf('%+d:%02d', $hrs*$sgn, $mins); 

//Your DB Connection - sample 
$db = new PDO('mysql:host=localhost;dbname=test', 'dbuser', 'dbpassword'); 
$db->exec("SET time_zone='$offset';"); 
+0

我可以将它包含在time.php文件中,并将它包含在我所有其他的php文件中?或者我该怎么做呢? – WouterS

+0

@外观它取决于你想要做什么。通常,不要过多地更改数据库的默认时区,以便数据库条目中的旧时间戳不受更改的影响。 – Tony

+1

@WouterS如果您只处理“欧洲/布鲁塞尔”时区,那么将数据库设置为一次并且永不改变它可能是一个好主意。如果您有多个时区的用户,我建议您将数据库时区设置为“UTC”,然后根据用户查看返回的时间进行调整。 – Tony