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 — Configure le fuseau horaire de l'objet DateTime
Description
Style orienté objet
Style procédural
Liste de paramètres
-
object -
Style procédural uniquement : Un objet DateTime retourné par la fonction date_create(). Cette fonction modifie cet objet.
-
timezone -
Un objet DateTimeZone représentant le fuseau horaire désiré.
Valeurs de retour
Retourne l'objet DateTime pour chainer les méthodes ou FALSE si une erreur survient.
Historique
| Version | Description |
|---|---|
| 5.3.0 | Changement de
valeur de retour de NULL à DateTime en cas de succès. |
Exemples
Exemple #1 Exemple avec DateTime::setTimeZone()
Style orienté objet
<?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";
?>
Style procédural
<?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";
?>
L'exemple ci-dessus va afficher :
2000-01-01 00:00:00+12:00 2000-01-01 01:45:00+13:45
Voir aussi
- DateTime::getTimezone() - Lit le fuseau horaire d'un objet DateTime
- DateTimeZone::__construct() - Crée un nouvel objet DateTimeZone
salladin
08-May-2012 01:59
keithm at aoeex dot com
24-Nov-2009 03:13
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.
