Wie konvertiert man DateTime (), um die Zeit basierend auf der WordPress-Zeitzoneneinstellung anzuzeigen?

Ich muss PHP’s DateTime() . Es zeigt momentan die GMT-Zeit anstelle der Zeit an, die für die Zeitzoneneinstellung (EST) im WordPress-Admin eingestellt ist.

Wie kann dies konvertiert werden, um die Zeitbasis anzuzeigen?

 $time = new DateTime(); echo $time->format("Ymd h:i:s"); // 2015-08-12 04:35:34 (gmt) // 2015-08-12 12:35:34 (what i want -- EST) 

Solutions Collecting From Web of "Wie konvertiert man DateTime (), um die Zeit basierend auf der WordPress-Zeitzoneneinstellung anzuzeigen?"

Ich bin mir nicht sicher, warum die Antwort von EliasNS korrekt ist, so weit ich weiß (und aus der Dokumentation ), sollte der zweite Parameter von DateTime::__construct() , falls vorhanden, eine DateTimeZone Instanz sein.

Das Problem wird dann, wie wir eine DateTimeZone Instanz erstellen. Dies ist einfach, wenn der Benutzer eine Stadt als ihre Zeitzone ausgewählt hat, aber wir können umgehen, wenn sie einen Offset gesetzt haben, indem sie die (veralteten) Etc / GMT-Zeitzonen verwenden.

 /** * Returns the blog timezone * * Gets timezone settings from the db. If a timezone identifier is used just turns * it into a DateTimeZone. If an offset is used, it tries to find a suitable timezone. * If all else fails it uses UTC. * * @return DateTimeZone The blog timezone */ function wpse198435_get_blog_timezone() { $tzstring = get_option( 'timezone_string' ); $offset = get_option( 'gmt_offset' ); //Manual offset... //@see http://us.php.net/manual/en/timezones.others.php //@see https://bugs.php.net/bug.php?id=45543 //@see https://bugs.php.net/bug.php?id=45528 //IANA timezone database that provides PHP's timezone support uses POSIX (ie reversed) style signs if( empty( $tzstring ) && 0 != $offset && floor( $offset ) == $offset ){ $offset_st = $offset > 0 ? "-$offset" : '+'.absint( $offset ); $tzstring = 'Etc/GMT'.$offset_st; } //Issue with the timezone selected, set to 'UTC' if( empty( $tzstring ) ){ $tzstring = 'UTC'; } $timezone = new DateTimeZone( $tzstring ); return $timezone; } 

Dann können Sie es wie folgt verwenden:

 $time = new DateTime( null, wpse198435_get_blog_timezone() ); 

Ich hatte eine Methode in meiner Bibliothek entwickelt, um die aktuelle Zeitzone von WP als korrektes Objekt zu erhalten: WpDateTimeZone::getWpTimezone() .

Obwohl timezone_string einfach ist (es ist bereits ein gültiger Name für die Zeitzone), gmt_offset Fall gmt_offset . Am besten kann ich es in ein +00:00 Format umwandeln:

 $offset = get_option( 'gmt_offset' ); $hours = (int) $offset; $minutes = ( $offset - floor( $offset ) ) * 60; $offset = sprintf( '%+03d:%02d', $hours, $minutes ) 

DateTime akzeptiert einen DateTimeZone Parameter, den Sie über WordPress-Optionen erhalten können. Etwas wie:

 $time = new DateTime(NULL, get_option('gmt_offset')); 
  • Terminzeit
  • WordPress Zeitzone

Hoffe das hilft.

Edit: Ich teste es und ich bekomme einen Fehler. Ich weiß nicht, wie man den timezone string in ein DateTimeZone Objekt DateTimeZone , aber so ist es.