web-dev-qa-db-ja.com

PHP date();タイムゾーンで?

PHPでサポートされているタイムゾーン のリストを確認しましたが、date()にそれらを含めるにはどうすればよいのか疑問に思いました。関数?ありがとう!

デフォルトのタイムゾーンは必要ありません。各ユーザーのタイムゾーンはデータベースに保存されています。ユーザーのタイムゾーンを取得して使用します。どうやって?ただし、使用方法ではなく、データベースから取得する方法を知っています。

59
user2917204

このようなタスクには、実際にPHPのDateTimeクラスを使用する必要があります。 date()またはdate_set_time_zoneを使用するように勧めるすべての回答を無視してください。これは単に古くて古いものです。

デモには擬似コードを使用するため、ニーズに合わせてコードを調整してください。

変数$ tzには有効なタイムゾーンの文字列名が含まれ、変数$ timestampにはタイムゾーンに従ってフォーマットするタイムスタンプが含まれると仮定すると、コードは次のようになります。

$tz = 'Europe/London';
$timestamp = time();
$dt = new DateTime("now", new DateTimeZone($tz)); //first argument "must" be a string
$dt->setTimestamp($timestamp); //adjust the object to correct timestamp
echo $dt->format('d.m.Y, H:i:s');

DateTimeクラスは強力であり、その機能をすべて把握するために、php.netでそれについて読んで時間を割く必要があります。あなたの質問に完全に答えるために-はい、タイムゾーンパラメーターを動的に調整できます(dbからの読み取り中の各反復で、新しいDateTimeZone()オブジェクトを作成できます)。

107
N.B.

私が正しいと理解した場合、次のように最初にタイムゾーンを設定する必要があります:

date_default_timezone_set('UTC');

そして、あなたは日付関数を使用することができます:

// Prints something like: Monday 8th of August 2005 03:12:46 PM
echo date('l jS \of F Y h:i:s A');
28
Suresh Kamrushi

タイムゾーンをサポートしているため、代わりに DateTimeクラス を使用してください。 date()と同等のDateTimeは DateTime::format です。

DateTimeの非常に便利なラッパーは Carbon です。間違いなく見てください。

UTCとしてデータベースに保存し、アプリケーションレベルで変換します。

15
ceejayoz

次のようになります。

date_default_timezone_set('America/New_York');
8
user3049608

上記の回答 により、いくつかのフープ/落とし穴を飛び越えることができたので、私のために働いたよりクリーンなコードを投稿するだけです:

$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('America/New_York'));
$dt->setTimestamp(123456789);

echo $dt->format('F j, Y @ G:i');
7
Andrew

これを試して。 UNIXタイムスタンプまたは日時文字列を渡すことができます

public static function convertToTimezone($timestamp, $fromTimezone, $toTimezone, $format='Y-m-d H:i:s') 
    {
        $datetime = is_numeric($timestamp) ?
                    DateTime::createFromFormat ('U' , $timestamp, new DateTimeZone($fromTimezone)) :
                    new DateTime($timestamp, new DateTimeZone($fromTimezone));

        $datetime->setTimezone(new DateTimeZone($toTimezone));

        return $datetime->format($format);
    }
2
dzona

これは2019年に完全に機能します:

date('Y-m-d H:i:s',strtotime($date. ' '.$timezone)); 
0
emmanuel

この非常に簡単な関数を作成しましたが、これは魅力のように機能します。

function ts2time($timestamp,$timezone){ /* input: 1518404518,America/Los_Angeles */            
        $date = new DateTime(date("d F Y H:i:s",$timestamp));
        $date->setTimezone(new DateTimeZone($timezone));
        $rt=$date->format('M d, Y h:i:s a'); /* output: Feb 11, 2018 7:01:58 pm */
        return $rt;
    }
0
Shatadip