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

あなたがしたいことは$userGMT、 currentTime に を追加してから、サーバー時間を減算することです。したがって、時間を秒単位で取得してから追加します$userGMT*60*60 - $yourTimeZone*60*60

于 2012-04-17T22:47:14.937 に答える
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 に答える