1

私はすべての時刻を UTC(0) で MySQL に保存しているので、データベースに保存するために、異なるタイム ゾーンを持つユーザーの時刻を表示している間に、後で変更することができます。

function get_utc(){
        date_default_timezone_set('UTC');
        return date("Y-m-d H:i:s"); 
    }
$now = get_utc();

そして今、タイムゾーンオフセットに基づいてそれらの時間を別のタイムゾーンに変換したいので、この関数を使用しています:

function utc_and_timezone($utc_time, $offset) {
        return date("Y-m-d H:i:s", strtotime($offset, strtotime($utc_time)));
    }

たとえば、UTC 時刻が 2013-01-30 21:06:29 の場合、その時刻に +5 タイムゾーンを適用すると、簡単に見つけることができます。

$new_time =  utc_and_timezone("2013-01-30 21:06:29", "+5 hours"); // Works Fine

5,6 やその他の整数などのオフセットでは問題なく動作しますが、+3.5、+2.5 などの他のオフセットではうまくいきません。

$new_time =  utc_and_timezone("2013-01-30 21:06:29", "+5.5 hours"); // NOT WORKING

なぜだかわかる方いますか?!異なるタイムゾーンで UTC 時間を作成するためのより良い解決策はありますか?

ありがとう


短い質問:2013-01-30 21:06:29タイムゾーンのように UTC 時間を表示したいのですが+3.5、どうすれば可能ですか?

4

1 に答える 1

6

PHP 側では、以下を試すことができます。

$utc_time = '2013-01-30 21:06:29';
$offset = '3.5';
echo date("Y-m-d H:i:s", strtotime($utc_time) + (3600 * $offset) );
//Returns 2013-01-31 00:36:29

$utc_time = '2013-01-30 21:06:29';
$offset = '-5.5';
echo date("Y-m-d H:i:s", strtotime($utc_time) + (3600 * $offset) );
//Returns 2013-01-30 15:36:29

MySQL 側では、以下を使用できますCONVERT_TZ

SELECT CONVERT_TZ('2013-01-30 21:06:29','+00:00','+03:30');
//Returns January, 31 2013 00:56:29+0000

SELECT CONVERT_TZ('2013-01-30 21:06:29','+00:00','-05:50');
//Returns January, 30 2013 15:16:29+0000
于 2013-01-30T21:21:16.170 に答える