2017-08-11 73 views
0

我正在开发一个项目(在线游戏),用户可以使用编码的“机场”前往不同的国家&城市。一旦他们走,将数据库中的cityid将例如更新:时区操纵

cityid = 1(英国 - 伦敦)

cityid = 2(美国 - LA)

因此,如果用户从英国前往美国它将存储数据库端cityid = 2

现在,

虽然这是功能性的,我希望将时区变更到它(如果可能的话),我曾尝试:

if ($user->cityid == 3) 
{ 
    $timestamp ='1502448414'; //Timestamp which you need to convert 
    $dt = new \DateTime("@$timestamp"); 
    $destinationTimezone = new \DateTimeZone('Mexico/General'); // To which timezone you need to convert 
    $dt->setTimeZone($destinationTimezone); // Set timezone 
    echo 'Mexico: '. $dt->format('H:i a'), "\n"; // Echo your changed datetime 
} 

正如你所看到的,我已经使用墨西哥为演示试图找出我的方法。

但是,这只会提取加时间戳的时间而不是实时。我知道,我可以简单地将时间戳添加到数据库表中,然后每秒钟运行一次cron来更新表,但这似乎是一个漫长的蜿蜒的路线。

现在在app.php中,标准设置是UTC,它作为实时时钟运行,返回:date('H:i:s')

我的问题是(在很多谷歌搜索后)有没有一种方法来操纵这个,使date()输出(美国)的新时间,当它已经去过?

道歉,我不能再添加编码到这个问题,我没有真正的想法如何接近它以上所述的一个。

回答

2

使用Carbon

if ($user->cityid == 3) { 
    $dt = \Carbon\Carbon::now("Your current location timezone"); 
    $dt->setTimeZone('Mexico/General'); 
    echo 'Mexico: '. $dt->format('H:i a'), "\n"; 
} 
+0

大概应该来自服务器时间 – Farkie

+0

@option必须提供时间戳。我用占位符时间戳更新了答案。还添加了一个不使用“碳”库 – chanafdo

+0

大修改。似乎要做的伎俩!感谢您的帮助。 – Option