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.
DateTime::setTimezone
(PHP 5 >= 5.2.0)
DateTime::setTimezone — Sets the time zone for the DateTime object
Descrierea
Parametri
- object
-
Doar pentru stilul procedural: Un obiect DateTime întors de funcţia date_create()
- timezone
-
Desired time zone.
Valorile întroarse
Returns the modified DateTime.
Exemple
Example #1 Setting and getting DateTimeZone objects
<?php
date_default_timezone_set('Europe/London');
$datetime = new DateTime('2008-08-03 12:35:23');
echo $datetime->getTimezone()->getName() . "\n";
$datetime = new DateTime('2008-08-03 12:35:23');
$la_time = new DateTimeZone('America/Los_Angeles');
$datetime->setTimezone($la_time);
echo $datetime->getTimezone()->getName();
?>
Exemplul de mai sus va afişa:
Europe/London America/Los_Angeles
Vedeţi de asemenea
- DateTime::getTimezone() - Return time zone relative to given DateTime
- timezone_open() - Returns new DateTimeZone object
DateTime::setTimezone
keithm at aoeex dot com
24-Nov-2009 11:13
24-Nov-2009 11:13
dan dot morin at gmail dot com
25-Jun-2009 07:56
25-Jun-2009 07:56
In my setup setTimezone() does modify the date, as well as the TZ.
Code:
<?php
$dt_obj = new DateTime('2009-06-25 12:00:00');
echo $dt_obj->format(DATE_RFC822) . "\n";
$dt_obj->setTimezone(new DateTimeZone('GMT'));
echo $dt_obj->format(DATE_RFC822);
?>
Output:
Thu, 25 Jun 09 12:00:00 -0400
Thu, 25 Jun 09 16:00:00 +0000
sht dot alien at gmx dot net
16-Jun-2009 04:13
16-Jun-2009 04:13
Btw: setTimezone() does NOT modify the date, just the TZ. I tested this just to make sure 'cause the documentation doesn't tell.
