1

我的整个网站是:

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);

哪个不正确。它仍然为欧洲/伦敦时区倒计时,而不是我选择的那个。

我试过做 echo date('H:i:s'); 并且可以看到上述影响的时间,它显示了我选择的时区的时间。

这样就可以了,但是 dateTime('now'); 不是吗?

4

2 回答 2

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
于 2012-04-19T07:56:46.563 回答
0

您想要做的是将$userGMT您的 currentTime 添加到然后减去您的服务器时间。所以以秒为单位获取时间然后添加$userGMT*60*60 - $yourTimeZone*60*60

于 2012-04-17T22:47:14.937 回答