Come ottenere l'impostazione del fuso orario di WordPress?
7 risposta
- voti
-
- 2011-02-02
se haibisogno digmt_offset allora
<?php echo get_option('gmt_offset'); ?>
questoti darà unnumerointero come 2 o -2 .
e se haibisogno della stringa delfuso orario usa
<?php echo get_option('timezone_string'); ?>
questoti darà una stringa come America/Indianapolis"
if you need the gmt_offset then
<?php echo get_option('gmt_offset'); ?>
this will give you an integer like 2 or -2.
and if you need the timezone string use
<?php echo get_option('timezone_string'); ?>
this will give you a string like America/Indianapolis
-
Ilmiotimezone_string ènel databasema è vuoto,anche dopo aver selezionato unfuso orario diversonellapagina delleimpostazioni.Qualepotrebbeessereil caso?(WP3.6)My timezone_string is in the database but it is empty, even after selecting a different timezone on the settings page. What might be the case? (WP3.6)
- 7
- 2013-09-13
- user2019515
-
Gmt_offesttiene conto dell'ora legalein base all'impostazione delfuso orario del sito?Does gmt_offest take daylight savings into account based on the site's timezone setting?
- 0
- 2013-12-19
- squarecandy
-
@ user2019515 Se scegli una città comefuso orario,verrà salvatanell'opzione "timezone_string"ma se scegli un offsetmanuale (UTC + 1peresempio) verrà salvatonell'opzione "gmt_offset" (come "1")e timezone_stringrimane vuoto.@user2019515 If you choose a city as a timezone it will save to the "timezone_string" option but if you choose a Manual Offset (UTC+1 for instance) it is saved to the "gmt_offset" option (as "1") and timezone_string remains empty.
- 7
- 2017-03-27
- Berend
-
- 2017-10-16
La spiacevole situazione è che ci sonoeffettivamente due diverse opzioni:
- Più recente
timezone_string
,che salvailfuso orarioin stile PHP. -
gmt_offset
meno recente,che salva l'offsetnumericoin virgolamobilein ore.
Manegli ambientipiù recenti
timezone_string
in realtà sovrascrivegmt_offset
,il valore restituito da quest'ultimo saràbasato sulprimo. Tuttavia l ' opposto non è vero:gmt_offset
potrebbeessere valido,mentretimezone_string
è vuoto.WordPress 5.3 avevafornito lafunzione
wp_timezone()
,che lo astraee restituisce un oggettoDateTimeZone
valido,indipendentemente dalleimpostazioni WP sottostanti.Prima di allora,l'avevoimplementatonellamia
WpDateTime
libreria (per curiosità che è stata utilizzata comebaseper l'implementazione dibase):class WpDateTimeZone extends \DateTimeZone { /** * Determine time zone from WordPress options and return as object. * * @return static */ public static function getWpTimezone() { $timezone_string = get_option( 'timezone_string' ); if ( ! empty( $timezone_string ) ) { return new static( $timezone_string ); } $offset = get_option( 'gmt_offset' ); $hours = (int) $offset; $minutes = abs( ( $offset - (int) $offset ) * 60 ); $offset = sprintf( '%+03d:%02d', $hours, $minutes ); return new static( $offset ); } }
The unfortunate situation is that there are indeed two different options:
- Newer
timezone_string
, which saves PHP–style time zone. - Older
gmt_offset
, which saves numeric float offset in hours.
But in newer environments
timezone_string
actually overridesgmt_offset
, the value returned by the latter will be based on the former. However the opposite isn't true —gmt_offset
might be valid, whiletimezone_string
is empty.WordPress 5.3 had shipped
wp_timezone()
function, that abstracts this and returns a validDateTimeZone
object, regardless of underlying WP settings.Before that I had a take on it implemented in my
WpDateTime
library (for trivia that was used as a basis for core implementation):class WpDateTimeZone extends \DateTimeZone { /** * Determine time zone from WordPress options and return as object. * * @return static */ public static function getWpTimezone() { $timezone_string = get_option( 'timezone_string' ); if ( ! empty( $timezone_string ) ) { return new static( $timezone_string ); } $offset = get_option( 'gmt_offset' ); $hours = (int) $offset; $minutes = abs( ( $offset - (int) $offset ) * 60 ); $offset = sprintf( '%+03d:%02d', $hours, $minutes ); return new static( $offset ); } }
-
Questa dovrebbeessere la risposta accettata.Lepersone siimbatterannoin bug se si affidanoesclusivamente aget_option ('timezone_string').This should be the accepted answer. People will run into bugs if they rely solely on get_option('timezone_string').
- 1
- 2018-08-14
- DiscoInfiltrator
-
Questa è la risposta corretta.This is the correct answer.
- 0
- 2018-12-09
- Lucas Bustamante
-
L'uso di "(int)"per $ oree "floor"per $minutinon èproblematico?Secondo la documentazione,`(int)`e `floor` sono quasi ugualitranne che` (int) `arrotonda da -4,5 a -4e`floor` lo arrotonda a -5.Sembra chefornirà offset difuso orarionegativierrati?Isnt use of `(int)` for $hours and `floor` for $minutes problematic? According to documentation, `(int)` and `floor` are almost the same except `(int)` will round -4.5 to -4 and `floor` will round it to -5. This seems like it will give incorrect negative timezone offsets?
- 0
- 2019-05-13
- Mikepote
-
@Mikepote sì,questo è stato risoltonella libreriamoltotempofa,solo una copia obsoleta del codicenella risposta qui.@Mikepote yeah, this was fixed in the lib a long time ago, just stale copy of the code in the answer here.
- 1
- 2019-05-15
- Rarst
-
Ohmio Dio,perché l'hannoimplementatoin questomodo ... Mi è costato un'oraintera *tilt *Oh my god why did they implement it like this .... It costed me a full hour *tilt*
- 0
- 2019-06-21
- Blackbam
-
La libreriagestisceilfatto che unfuso orariopuò contenerepiù offset?Vedi: https://stackoverflow.com/tags/timezone/infoDoes the lib handle the fact that one timezone can contain multiple offsets? See: https://stackoverflow.com/tags/timezone/info
- 0
- 2019-11-27
- DarkNeuron
-
@DarkNeuron lib lo lascia a PHP,cheincludee utilizzail database olson.@DarkNeuron lib just leaves that to PHP, which includes and uses olson database.
- 0
- 2019-11-29
- Rarst
-
- 2011-02-02
Controlla la pagina di riferimento delle opzioni .L'opzione
gmt_offset
restituisce unnumerointero.Adesempio,seilfuso orario èimpostato sull'ora della costa orientale (adesempio America/New_York),gmt_offset
dovrebbeessere -5.Check the Option Reference page. The option
gmt_offset
returns an integer. For example, if the timezone is set to Eastern time (e.g. America/New_York),gmt_offset
should be -5. -
- 2011-02-03
Nonpensare di ottenere una stringa come US/Eastern senzamemorizzaretutte le stringhe che desideriin un arraye fare riferimento aesse.Utilizzando PHPpuoi ottenere l'abbreviazione delfuso orario,adesempio EST ;e se hai quei valorimemorizzatiin un array con le stringhe che desideri,puoi cercarli.
<?php date_default_timezone_set(get_option('timezone_string')); echo date('T'); // will give you three-character string like "EST" $timezones = array ( 'EST' => 'US/Eastern', 'CST' => 'US/Central', // etc, etc, etc. ); echo $timezones [ date('T') ]; // should be what you want. ?>
Don't think you're gonna get a string like US/Eastern without storing all the strings you want in an array and referring to them. Using PHP you can get the timezone abbreviation, ie EST; and if you have those values stored in an array with the strings you want, you can look them up.
<?php date_default_timezone_set(get_option('timezone_string')); echo date('T'); // will give you three-character string like "EST" $timezones = array ( 'EST' => 'US/Eastern', 'CST' => 'US/Central', // etc, etc, etc. ); echo $timezones [ date('T') ]; // should be what you want. ?>
-
Questonon ènecessario.Gli [standard delfuso orario] (http://php.net/manual/en/timezones.php)fannoparte di PHP dalla 5.2,così come l '[oggetto DateTimeZone] (http://php.net/manual/en/datetimezone.getname.php)e le relativefunzioni standard.This is unnecessary. The [timezone standards](http://php.net/manual/en/timezones.php) have been part of PHP since 5.2, as has the [DateTimeZone object](http://php.net/manual/en/datetimezone.getname.php) and the related standard functions.
- 0
- 2018-10-24
- haz
-
- 2019-08-05
Dato che wordpressmantiene la stringa delfuso orarionellatabella delle opzioni,puoi utilizzareilmodo orientato agli oggettiper ottenere l'oragiusta sultuo sito wordpress:
$tz = new DateTimeZone(get_option('timezone_string')); $dt = new DateTime("now", $tz); $page .= "<p> DateTime " . $dt->format("Y-m-d H:i:s") . "</p>";
Given the fact that wordpress keeps the timezone string in the options table, you can use the object oriented way of getting the right time on your wordpress site:
$tz = new DateTimeZone(get_option('timezone_string')); $dt = new DateTime("now", $tz); $page .= "<p> DateTime " . $dt->format("Y-m-d H:i:s") . "</p>";
-
- 2014-12-11
Da aggiungere a Bainternet (lo aggiungo come rispostaperchénonposso commentare - homeno di 50puntinello stack WP Development).
WordPressmemorizzerà una stringa difuso orario solo se selezioni una stringa difuso orarionelleimpostazionigenerali.La selezione UTF è quellapredefinitanell'elenco,mapuoi scorrerefino alle stringhe delfuso orario.Seimposti una stringa delfuso orario,verrannoimpostati sia l'UTF che la stringa delfuso orario.Sarannogli stessi (il che significa che l'UTF viene reimpostato sullanuova zona quando si seleziona una stringa difuso orario).
(WordPress 4)
To add to Bainternet (I am adding this as an answer because I cannot comment -- I have less than 50 points on WP Development stack).
WordPress will only store a timezone string if you select a timezone string in the general settings. UTF selection is where it defaults in the list, but you can scroll way up to timezone strings. If you set a timezone string, both the UTF and the Timezone string will be set. They will be the same (meaning, the UTF gets reset to the new zone when you select a timezone string timezone).
(WordPress 4)
-
- 2015-11-06
Ci sono alcune opzioni,nessuna delle qualifunziona allagrande. Questo è unbug di WordPresse fa davvero schifoperché l'ora è sbagliata ameno chenonimpostiil tuo sito su UTC ...il che èfonte di confusionee non sempre ènemmenopossibile.
Questo codice successivopensofunzioni solo se scegliiltuofuso orario (in Impostazioni -> Generalenell'amministratore) come città connomeinvece che con unnumero GMT di offset. Non l'hotestatoma èmoltoprobabile che
get_option('gmt_offset')
siaimpostato quandoget_option('timezone_string')
non lo è.date_default_timezone_set(get_option('timezone_string'));
Lo svantaggio di questo è che WordPresspresume che PHP siaimpostato su UTC quando si creanoi timestamp dimysql,quindipuoi rovinare unpo 'iltuo database ogni volta che cambifuso orario! Pernonparlare di altriplugin WPpossonopresumere che l'ambiente PHP sia semprein UTC.
Quindi,se desideri solo un orario corretto,puoiforzareiltimestampin UTC con:
get_post_time('c', true); //should work for non-post objects.
Sfortunatamente,sebbene corretto,ilfuso orario verràimpostato su UTC.
Etieni presente chenonpuoi entrambi utilizzareilflag "true" e lafunzionetimezone_setpredefinita.
Qualsiasi soluzione appropriata sarà uno snippet di codice chetiene conto sia di
gmt_offset
Etimezone_string
e li utilizzaperimpostare unfuso orario su alcuniingresso. WPpresume che PHP siaimpostato su UTC quandoeseguei timestamp dimysqle potrebbe rompere altriplug-in.Esiste una di queste soluzioni su https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ma,ancora una volta,questo è un BUG,quindi dovresti usare
get_post_time($date_format, TRUE)
codeper ottenere untimestampeffettivamente corretto.There are a few options, none of which really work great. This is a WordPress bug, and it genuinely sucks because the time is wrong unless you set your site to UTC... which is confusing and not always even possible.
This next code I think only works if you choose your Timezone (Under Settings -> General in admin) as a named city instead of by an GMT number offset. I haven't tested this but it's very possible that
get_option('gmt_offset')
is set whenget_option('timezone_string')
is not.date_default_timezone_set(get_option('timezone_string'));
The downside of this is that WordPress assumes PHP is set to UTC when making mysql timestamps, so you can mess up your database a little bit whenever you switch timezones! Not to mention other WP plugins may assume that the PHP environment is always in UTC.
So, if you just want a correct time -- you can force your timestamp to be in UTC with:
get_post_time('c', true); //should work for non-post objects.
Unfortunately, although correct, it'll make the timezone get set to UTC.
And note that you can't both use the "true" flag and the default timezone_set function.
Any proper solution is gonna be a code-snippet that accounts for both
gmt_offset
ANDtimezone_string
and uses them to set a timezone on some input. WP assumes that PHP set to UTC when doing mysql timestamps, and it might break other plugins.There's one such solution on https://www.skyverge.com/blog/down-the-rabbit-hole-wordpress-and-timezones/ but, again this is a BUG, so you should use the
get_post_time($date_format, TRUE)
code to get a timestamp that is actually correct.
Qualcunopuò dirmi come ottenereilfuso orarioimpostatonell'amministratore di WordPress?
Adesempio,seilblog èimpostato sull'ora della costa orientale,hobisogno di questa stringaesattaper stampare:
Questo èper unafunzione che risiedein functions.phpnelmiotema.