DateTime :: diff () wird von der Zeitzone nicht beeinflusst, gibt jedoch immer den gleichen Wert zurück
Ich füge meinem System auktionsbasierte Daten hinzu. Zum Beispiel:
user's timezone is : `America/Denver`
auction start time is : Thu, 21 Jun 2012 03:46:22 AM
auction period : 1 day.
auction end time : Fri, 22 Jun 2012 03:46:22 AM
Ich speichere alle diese Informationen so, wie sie in meiner Datenbank sind (d. H.Alle gespeicherten Zeiten basieren auf der Zeitzone des Benutzers).
Jetzt will ich das tatsächlichDifferenz zwischen Endzeit und aktueller Zeit (of America / Denver Zeitzone).
ich benutzteDateTime()
funktionen
selbst ich konvertiere die Zeitzone nicht; es gibt den gleichen Unterschied zurück (und das ist auch falsch).
Mein PHP-Code ist unten; Sie finden es auch unterCodePad
$end_time = 'Fri, 22 Jun 2012 03:46:22 AM';
$tz = 'America/Denver';
dateDifference($end_time,$tz);
function dateDifference($end, $tz = NULL)
{
$owner_tz = new DateTimeZone($tz);
//var_dump($owner_tz->getName());
$from = new DateTime("now", new DateTimeZone('GMT'));
$from ->setTimeZone($owner_tz);
$to = new DateTime($end,new DateTimeZone('GMT'));
/* @Note:I have commented below setTimeZone() because I have already stored
* `end time` as per user's timezone, So I dont need to convert it again
* into user's timezone.you can un-comment below line.
* it doesn't affect the results anyways.
*/
//$to ->setTimeZone($owner_tz);
//procedural style using date_diff()
$interval = date_diff($from, $to);
var_dump($interval);
// OO style using dateTime::diff()
$interval = $from->diff($to);
var_dump($interval);
}
Kehrt zurück:
object(DateInterval)[4]
public 'y' => int 0
public 'm' => int 0
public 'd' => int 0
public 'h' => int 16
public 'i' => int 40
public 's' => int 24
public 'invert' => int 0
public 'days' => int 6015
Verweise:
DateTime()
DateTime::diff
DateTime::setTimeZone
Umgang mit der Konvertierung von Zeitzonen mit PHP DateTime