web-dev-qa-db-ja.com

Unixタイムスタンプをタイムゾーンに変換しますか?

+5に設定されているUNIXタイムタイムがありますが、それを東部標準時の-5に変換したいと思います。そのタイムゾーンでタイムスタンプを生成するだけですが、+ 5に設定している別のソースからタイムスタンプを取得しています。

日付に変換されている現在の変更されていないタイムスタンプ

<? echo gmdate("F j, Y, g:i a", 1369490592) ?>
12
Necro.

DateTime および DateTimeZone を使用します。

$dt = new DateTime('@1369490592');
$dt->setTimeZone(new DateTimeZone('America/Chicago'));
echo $dt->format('F j, Y, g:i a');
35
John Conde

簡単それを行う方法は次のとおりです。

gmdate()を使用しているときに、gmdateのunix_stampに秒単位のタイムゾーンを追加します。

私のタイムゾーンがGMT + 5:30だと考えてください。したがって、5時間30分秒単位は19800になります

だから、私はこれを行います:

gmdate("F j, Y, g:i a", 1369490592+19800)

0
J Shubham

これはnix/gmt/utcタイムスタンプを必要なタイムゾーンに変換するへの関数です。

function unix_to_local($timestamp, $timezone){
    // Create datetime object with desired timezone
    $local_timezone = new DateTimeZone($timezone);
    $date_time = new DateTime('now', $local_timezone);
    $offset = $date_time->format('P'); // + 05:00

    // Convert offset to number of hours
    $offset = explode(':', $offset);
    if($offset[1] == 00){ $offset2 = ''; }
    if($offset[1] == 30){ $offset2 = .5; }
    if($offset[1] == 45){ $offset2 = .75; }
    $hours = $offset[0].$offset2 + 0;

    // Convert hours to seconds
    $seconds = $hours * 3600;

    // Add/Subtract number of seconds from given unix/gmt/utc timestamp
    $result = floor( $timestamp + $seconds );

    return $result;
}
0
MR_AMDEV

John Condeの回答 の編集キューがいっぱいであるため、より詳細な回答を追加します。

から DateTime::__construct(string $time, DateTimeZone $timezone)

$ timeパラメーターがUNIXタイムスタンプ(例:@ 946684800)の場合、$ timezoneパラメーターと現在のタイムゾーンは無視されます

これが、UNIXタイムスタンプからDateTimeオブジェクトを作成するときに、デフォルトであっても常にタイムゾーンを指定する必要がある主な理由です。 John Condeの答え に触発された説明されたコードを参照してください:

$dt = new DateTime('@1369490592');

// use your default timezone to work correctly with unix timestamps
// and in line with other parts of your application
date_default_timezone_set ('America/Chicago'); // somewhere on bootstrapping time
…
$dt->setTimeZone(new DateTimeZone(date_default_timezone_get()));

// set timezone to convert time to the other timezone
$dt->setTimeZone(new DateTimeZone('America/Chicago'));

echo $dt->format('F j, Y, g:i a');
0
terales