I found unexpected behaviour when passing a timestamp.
timezone seems to always be GMT+0000 unless setTimezone() is set.
<?php
$MNTTZ = new DateTimeZone('America/Denver');
$ts = 1336476757;
$dt = new DateTime("@$ts", $MNTTZ);
var_dump($dt->format('T'), $dt->format('U'));
$dt->setTimezone($MNTTZ);
var_dump($dt->format('T'), $dt->format('U'));
/** Output:
string(8) "GMT+0000"
string(10) "1336476757"
string(3) "MDT"
string(10) "1336476757"
**/
?>
DateTime::setTimezone
date_timezone_set
(PHP 5 >= 5.2.0)
DateTime::setTimezone -- date_timezone_set — Sets the time zone for the DateTime object
Açıklama
Nesne yönelimli kullanım
Yordamsal kullanım
Değiştirgeler
-
nesne -
Sadece yordamsal tarz: date_create() tarafından bir DateTime nesnesi döndürülür. İşlev bu nesnede değişiklik yapar.
-
timezone -
A DateTimeZone object representing the desired time zone.
Dönen Değerler
Değişmiş
DateTime
nesnesinden başarısızlık durumunda FALSE döner.
Sürüm Bilgisi
| Sürüm: | Açıklama |
|---|---|
| 5.3.0 | Başarı durumunda dönen değer artık NULL değil,
DateTime oldu. |
Örnekler
Örnek 1 DateTime::setTimeZone() example
Nesne yönelimli kullanım
<?php
$date = new DateTime('2000-01-01', new DateTimeZone('Pacific/Nauru'));
echo $date->format('Y-m-d H:i:sP') . "\n";
$date->setTimezone(new DateTimeZone('Pacific/Chatham'));
echo $date->format('Y-m-d H:i:sP') . "\n";
?>
Yordamsal kullanım
<?php
$date = date_create('2000-01-01', timezone_open('Pacific/Nauru'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
date_timezone_set($date, timezone_open('Pacific/Chatham'));
echo date_format($date, 'Y-m-d H:i:sP') . "\n";
?>
Yukarıdaki örneklerin çıktısı:
2000-01-01 00:00:00+12:00 2000-01-01 01:45:00+13:45
Ayrıca Bakınız
- DateTime::getTimezone() - Return time zone relative to given DateTime
- DateTimeZone::__construct() - Yeni bir DateTimeZone nesnesi oluşturur
salladin ¶
1 year ago
keithm at aoeex dot com ¶
3 years ago
The timestamp value represented by the DateTime object is not modified when you set the timezone using this method. Only the timezone, and thus the resulting display formatting, is affected.
This can be seen using the following test code:
<?php
$MNTTZ = new DateTimeZone('America/Denver');
$ESTTZ = new DateTimeZone('America/New_York');
$dt = new DateTime('11/24/2009 2:00 pm', $MNTTZ);
var_dump($dt->format(DATE_RFC822), $dt->format('U'));
$dt->setTimezone($ESTTZ);
var_dump($dt->format(DATE_RFC822), $dt->format('U'));
/** Output:
string(29) "Tue, 24 Nov 09 14:00:00 -0700"
string(10) "1259096400"
string(29) "Tue, 24 Nov 09 16:00:00 -0500"
string(10) "1259096400"
**/
?>
As such, you can use this to easily convert between timezones for display purposes.
