0

特定のタイムゾーン (ジャマイカ) のタイムスタンプがあり、その GMT タイムスタンプを取得したい。これよりもエレガントなソリューションはありますか:

$start = DateTime::createFromFormat('U', 1330560000);
        $start->setTimezone(new DateTimeZone('America/Jamaica'));
        $start->format('Y-m-d H:i:s');//2012-02-29 19:00:00 NO NO NO

        $tz = new DateTimeZone( 'America/Jamaica' );
        $transition = $tz->getTransitions($start->getTimestamp(),$start->getTimestamp());


        $offset = $transition[0]['offset'];


        $start = DateTime::createFromFormat('U', $params['start'] - 2*$transition[0]['offset']);
        $start->setTimezone(new DateTimeZone('America/Jamaica'));
        $start->format('Y-m-d H:i:s'); // "2012-03-01 05:00:00" YESSSS!!!
4

2 に答える 2

1

Unix 時間 (POSIX 時間) は、 1970 年 1 月 1 日の協定世界時 (UTC)の午前 0 時から経過した秒数として定義される、インスタンスを時間で表すためのシステムです。

ソースウィキペディア

UNIX タイムスタンプの考え方は、常に UTC (世界中のどこでも xD ) であるということです。UTC の時刻を表していない場合、UNIX タイムスタンプではなくなります。

于 2013-02-01T10:26:43.063 に答える
0

これは、関数のコメントに書いたように、整形式のタイム スタンプを作成するクラスの一部です。日付、タイム ゾーン、および識別子の文字列を渡すだけで非常に簡単に使用できます。

それがあなたを助けることを願っています

/**
* Default timestamp format for formatted_time
* @var  string
*/
public static $timestamp_format = 'Y-m-d H:i:s';
/**
* Returns a date/time string with the specified timestamp format
* @example $time = Date::formatted_time('5 minutes ago');
* @link    http://www.php.net/manual/datetime.construct
* @param   string  $datetime_str       datetime string
* @param   string  $timestamp_format   timestamp format
* @param   string  $timezone           timezone identifier
* @return  string
*/
public static function formatted_time($datetime_str = 'now', $timestamp_format = NULL, $timezone = NULL){
            $timestamp_format = ($timestamp_format == NULL) ? Date::$timestamp_format : $timestamp_format;
            $timezone         = ($timezone === NULL) ? Date::$timezone : $timezone;
            $tz   = new DateTimeZone($timezone ? $timezone : date_default_timezone_get());
            $time = new DateTime($datetime_str, $tz);
            if ($time->getTimeZone()->getName() !== $tz->getName()){
                $time->setTimeZone($tz);
            }
            return $time->format($timestamp_format);
        }
于 2013-02-01T10:26:21.503 に答える