0

UTCまでの秒単位のオフセットがあります。データベースに保存されているすべてのタイムスタンプはUTCであり、選択クエリ中にオフセットを適用する方法、

mysql_query("SELECT * FROM table WHERE unix_timestamp=unix_timestamp with offset applied");

mysql_query("INSERT INTO table (unix_timestamp) VALUES(UNIX_TIMESTAMP())");

UTC時刻でデータベースに挿入し、現地時間で取得したいと思います。

PHPの場合:

date_default_timezone_set('UTC');

$user_timezone_offset=-7200; // -2

selectのmysqlのランタイムをunix_timestampフィールド$user_timezone_offsetに差し引くことはできますか?

明らかに必要なものであるUTCに挿入していますが、ユーザーの現地時間で選択するには、データベースに保存されているタイムスタンプにオフセットを適用する必要があります。

編集:私はちょうどこれに出くわしました:

$user_timezone_offset="-2:00";

FROM_UNIXTIME(CONVERT_TZ(unix_timestamp,'+00:00','$user_timezone_offset'))

それをselectクエリに適用して、unix_timestampの選択をselect内で比較するために変換し、結果もphpのfetch_array用に変更する方法を知る必要があります。

これが解決策のようです:

 SELECT *, Unix_Timestamp(CONVERT_TZ(FROM_UNIXTIME(unix_timestamp), '+00:00', '$user_timezone_offset')) as unix_timestamp

実際、これには問題があります-

 mysql_fetch_array($result){ $row['unix_timestamp']; }

チェックしながら変換されます

  WHERE unix_timestamp=value //assuming unix_timestamp

選択時に変換されます-そこでは変換されず、別の

  Unix_Timestamp(CONVERT_TZ(FROM_UNIXTIME(unix_timestamp), '+00:00', '$user_timezone_offset')) 

変換された値に対してチェックが行われるたびに、unix_timestampが「変換」されるように呼び出す必要があります。

4

1 に答える 1

1

問題を複雑にしすぎているのではないかと思います。

タイムスタンプは常にUTCです。PHPでタイムスタンプを取得する場合、それはUTCです。

date()たとえば、関数を使用してタイムゾーンを変換すると、php.ini設定のdate.timezoneが設定されているタイムゾーンで表示されます。

したがって、特定のタイムゾーンを持つユーザーがいる場合date_default_timezone_set()は、現地時間で日付を表示する前に、適切なタイムゾーンで呼び出すだけです。

DateTimeクラスを使用する場合は、オブジェクトを作成するときに目的のタイムゾーンを指定できます。

特別な理由がない限り、データベースからタイムスタンプをフェッチするときにタイムゾーン変換を実行する必要はありません。PHPがこれをすべて処理します。

于 2012-11-07T19:52:52.853 に答える