DateTime不会临时更改

时间:2012-04-17 21:16:33

标签: php datetime timezone

我的整个网站是:

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');犯规?

2 个答案:

答案 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