2017-01-18 4 views
0

ユーザーが希望するタイムゾーンに設定できるデータベースから返されるタイムゾーン変数があるとします。 GMT + 5は次のように単純に戻ります:ユーザータイムゾーンに基づいてタイムスタンプを返す方法は?

$timezone = 5; 

イベントの日付を特定の時刻形式で反映できるように、ユーザーのタイムゾーンが必要です。

while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { 
$time = strftime("%Y-%m-%d %I:%M %p", strtotime($row["time"])); 
} 
echo $time; 

は、どのように私は、ユーザー優先のタイムゾーンに基づいてイベントの時間を反映するために、上記の出力を変えることができる:ここでは私がこれまで持っているものでしょうか?

//Output = 2017-01-15 12:09 AM 
//Expected Output: 2017-01-14 07:09 PM 
+0

タイムゾーンを格納するために整数を使用しないでください。タイムゾーン識別子を使用してください(例: 'Europe/Paris')。 –

+0

GMTに行ったらどうなりますか? – Dylan

答えて

2

DateTimeDateTimeZoneオブジェクトを使用してください。

<?php 

$storedDate = new DateTime('2017-01-15 12:09 AM'); 
$userDate = (clone $storedDate)->setTimeZone(new DateTimeZone('Europe/Paris')); 

printf(
    "Stored Date:\t%s\nUser Date:\t%s\n", 
    $storedDate->format(DATE_ATOM), 
    $userDate->format(DATE_ATOM) 
); 

// outputs: 
// Stored Date: 2017-01-15T00:09:00+00:00                    
// User Date:  2017-01-15T01:09:00+01:00 

私のコメントで述べたように、私はタイムゾーンを整数として保存することを勧めません。

まず、タイムゾーンの中には整数に収まらないものがあります。たとえば、インドはUTC時刻から5:30(+0530)までです。

整数として格納することは、一部の国または同じ国の一部の地域(ブラジル参照)の夏時間を適切に処理するのに役立ちません。

タイムゾーンオフセットは変更される可能性がありますが、特定の場所(たとえば、Europe/Paris)の設定が変更される可能性は低いです。

+0

これをGMT(これは私が整数を使用した理由)で動作させるためのソリューションを提供できますか? – Dylan

+0

'DateTimeZone'クラスを使用すると、IANAタイムゾーン(' Europe/Paris')や 'GMT + 1 'などがあります。しかし、再度、整数としてタイムゾーンを格納することは悪い考えです。私はそれに応じて私の答えを編集します。 –

関連する問題