我的整个网站是:
date_default_timezone_set('Europe/London');
用户可以选择他们的时区,并在数据库中保存为4.0
(迪拜)
现在我希望用户选择的时区会对网站上存在的倒计时产生影响。倒计时看起来像这样:
$today_date = new DateTime('now'); // now
$final_date = new DateTime($date); // a date in the future
$interval = $today_date->diff($final_date); // find the difference
$time_left = $interval->format('starting in %d days, %h hours and %i minutes'); // display it
在此之上,我做了以下事情:
$userGMT = $user->get_gmt();
date_default_timezone_set($userGMT);
哪个不正确。它仍然是欧洲/伦敦时区的倒计时,而不是我选择的那个。
我试过回音日期('H:i:s');并且可以看到上面已经影响了它并且它显示了我选择的时区的时间。
这样可行,但是dateTime('now');犯规?
答案 0 :(得分:0)
您要做的是将$userGMT
添加到currentTime,然后减去服务器时间。因此,请在几秒钟内获取时间,然后添加$userGMT*60*60 - $yourTimeZone*60*60
答案 1 :(得分:0)
当生成将来的日期时,需要明确适用的时区。这表明该时间间隔与主机的时区无关:
<?php
$date = '2012-04-19'; // date in the future
$user_tz = new DateTimeZone('Asia/Dubai');
foreach (array('Europe/London', 'America/Los_Angeles') as $tzname)
{
date_default_timezone_set($tzname);
$today_date = new DateTime('now'); // now
$final_date = new DateTime($date, $user_tz); // future date with explicit tz
$interval = $today_date->diff($final_date); // find the difference
$time_left = $interval->format('start in %d days, %h hours and %i minutes');
echo "$tzname: $time_left\n";
}
输出:
Europe/London: start in 0 days, 11 hours and 53 minutes
America/Los_Angeles: start in 0 days, 11 hours and 53 minutes