0

ユーザーのデータベースがあり、各ユーザーには独自のタイムゾーン設定があります。たとえば、ユーザー A には GMT-05:00 があり、ユーザー B には GMT+1:00 などがあります。

私が見つけた最も簡単な方法を使用して、このユーザーの正しい現在の日付/時刻を表示しようとしています。私はこのコードにたどり着きました.これは見た目は良いですが(私見)、マイナス(マイナス5時間)ではなくプラスの差(+5時間)を表示します。

以下のスクリプト:

<?php
    // below two lines -- info that I normally take from DB
    $row['callstart'] = "1362067791";  // unixtimestamp
    $userInfo['timezone'] = 'GMT-5';

    echo date('Y-m-d H:i:s',$row['callstart'])."\n"; // original hour

    $date = date('Y-m-d H:i:s',$row['callstart']);
    $date = new DateTime($date,new DateTimeZone('GMT'));

    $date->setTimezone(new DateTimeZone($userInfo['timezone']));
    $row['callstart'] = $date->format('Y-m-d H:i:s');
    echo $row['callstart']; // converted to GMT-5 hour
?>

以下の結果:

  root@ssw238:/tmp# php /work/yy.php
  2013-02-28 16:09:51 // that's the current GMT hour/date
  2013-02-28 21:09:51 // should actually be 11:09:51 instead of 21:09:51
  root@ssw238:/tmp#

私がどこで何を間違っているのか分かりますか?

4

2 に答える 2

3

これは、常識が私たちに反するときです...ウィキペディアより

In order to conform with the POSIX style, those zone names beginning with "Etc/GMT" have their sign reversed from what most people expect. In this style, zones west of GMT have a positive sign and those east have a negative sign in their name (e.g "Etc/GMT-14" is 14 hours ahead/east of GMT.)

だから解決策は

// below two lines -- info that I normally take from DB
$row['callstart'] = "1362067791";  // unixtimestamp
// reversed the sign
$userInfo['timezone'] = 'GMT+5';

echo date('Y-m-d H:i:s',$row['callstart'])."\n"; // original hour

$date = date('Y-m-d H:i:s',$row['callstart']);
$date = new DateTime($date,new DateTimeZone('GMT'));

$date->setTimezone(new DateTimeZone($userInfo['timezone']));
$row['callstart'] = $date->format('Y-m-d H:i:s');
echo $row['callstart']; // converted to GMT-5 hour
于 2013-02-28T16:40:28.390 に答える
0

うーん...私はむしろこれを

 <?php



$row['callstart'] = "1362067791";
$userInfo['timezone'] = 'GMT-5';

$orginal =date('Y-m-d H:i:s',$row['callstart']);
echo $orginal;
echo '<br/>';

$newdate=date('Y-m-d H:i:s',($orginal + strtotime(substr($userInfo['timezone'] ,3).'hours')));
echo $newdate

?>

2013-02-28 17:09:51 2013-02-28 13:22:36

于 2013-02-28T16:34:27.547 に答える