PHP 8.2 nevrací ve funkci date čas s timezone

PHP 8.2 nevrací ve funkci date čas s timezone
« kdy: 12. 04. 2023, 16:19:26 »
php.ini:
Kód: [Vybrat]
root@testphp:/opt# grep timezone /etc/php/8.?/cli/php.ini
/etc/php/8.1/cli/php.ini:; Defines the default timezone used by the date functions
/etc/php/8.1/cli/php.ini:; https://php.net/date.timezone
/etc/php/8.1/cli/php.ini:;date.timezone =
/etc/php/8.2/cli/php.ini:; Defines the default timezone used by the date functions
/etc/php/8.2/cli/php.ini:; https://php.net/date.timezone
/etc/php/8.2/cli/php.ini:;date.timezone =

Skript:
Kód: [Vybrat]
cat /opt/date.php
<?php

$date 
date('Y-m-d H:i:s');
echo 
$date;
echo 
"\n";
?>

Testy:
Kód: [Vybrat]
root@testphp:/opt# /usr/bin/php8.2 /opt/date.php
2023-04-12 14:00:22

root@testphp:/opt# /usr/bin/php8.1 /opt/date.php
2023-04-12 16:00:26

root@testphp:/opt# timedatectl
               Local time: Wed 2023-04-12 16:00:34 CEST
           Universal time: Wed 2023-04-12 14:00:34 UTC
                 RTC time: Wed 2023-04-12 14:00:35
                Time zone: Europe/Prague (CEST, +0200)
System clock synchronized: no
              NTP service: active
          RTC in local TZ: no

Kód: [Vybrat]
root@testphp:~# apt-cache policy php8.2-cli
php8.2-cli:
  Installed: 8.2.4-1+0~20230409.18+debian11~1.gbp556b04
  Candidate: 8.2.4-1+0~20230409.18+debian11~1.gbp556b04
  Version table:
 *** 8.2.4-1+0~20230409.18+debian11~1.gbp556b04 990
        990 https://packages.sury.org/php bullseye/main amd64 Packages
        100 /var/lib/dpkg/status
root@testphp:~# apt-cache policy php8.1-cli
php8.1-cli:
  Installed: 8.1.17-1+0~20230409.38+debian11~1.gbp0c3ecb
  Candidate: 8.1.17-1+0~20230409.38+debian11~1.gbp0c3ecb
  Version table:
 *** 8.1.17-1+0~20230409.38+debian11~1.gbp0c3ecb 990
        990 https://packages.sury.org/php bullseye/main amd64 Packages
        100 /var/lib/dpkg/status

Je to bug ci ne? Nemuzu najit v release notes php8.2, co by se k tomu dalo priradit.
« Poslední změna: 12. 04. 2023, 18:21:48 od Petr Krčmář »


RDa

  • *****
  • 2 567
    • Zobrazit profil
    • E-mail
Re:php8.2 nevraci ve funkci date cas s timezone
« Odpověď #1 kdy: 12. 04. 2023, 16:28:41 »
Ja mam v gentoo config per verzi, takze mozna ti vypadl konfiguracni radek? -- vidim ze asi ne.

Udelej si tedy dump runtime nastaveni - treba z ini_get_all a udelej diff
https://www.php.net/manual/en/function.ini-get-all.php

Pripadne ten timezone zkontroluj pres date_default_timezone_get
https://www.php.net/manual/en/function.date-default-timezone-get.php

Re:php8.2 nevraci ve funkci date cas s timezone
« Odpověď #2 kdy: 12. 04. 2023, 17:21:19 »
Ak timezone nieje nastavena cez date_default_timezone_set() a ani v php.ini (tvoj pripad) tak defaultna timezona je UTC, takze 8.2 to ma spravne.

Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #3 kdy: 13. 04. 2023, 00:14:34 »
Je dobre vzdy pouzit casovu zonu:
Kód: [Vybrat]
date('Y-m-d H:i:s T') alebo pouzit
Kód: [Vybrat]
gmdate('Y-m-d H:i:s') ktore vzdy pracuje s GMT. Bolo by vam ihned jasne o aky cas ide. Ak by ten cas videl niekto z inej casovej zony, tak by uz vobec nevedel ktora bije...


Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #4 kdy: 13. 04. 2023, 07:51:36 »
Koukám správně, že v php.ini jsou oba řádky s proměnnou "date.timezone =" zakomentované?
Tzn. se použije nějaký compile-time default?

Vidím dva balíčky, které mají v názvu "debian", různé číslo verze, ale stejné datum... to vznikne jak? Je to přirozená vlastnost nějakého upstream build systému, nebo jste si je kompiloval a balil sám? (vrtá mi hlavou možná další souvislost třeba s locale v okamžiku kompilace)


Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #5 kdy: 13. 04. 2023, 08:12:38 »
Koukám správně, že v php.ini jsou oba řádky s proměnnou "date.timezone =" zakomentované?
Tzn. se použije nějaký compile-time default?

Default je UTC

Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #6 kdy: 13. 04. 2023, 08:38:12 »
Koukám správně, že v php.ini jsou oba řádky s proměnnou "date.timezone =" zakomentované?
Tzn. se použije nějaký compile-time default?

Vidím dva balíčky, které mají v názvu "debian", různé číslo verze, ale stejné datum... to vznikne jak? Je to přirozená vlastnost nějakého upstream build systému, nebo jste si je kompiloval a balil sám? (vrtá mi hlavou možná další souvislost třeba s locale v okamžiku kompilace)

vzdyt je v tom vypisu videt ze je to z packages.sury.org...Takze zadna kompilace.

Re:php8.2 nevraci ve funkci date cas s timezone
« Odpověď #7 kdy: 13. 04. 2023, 08:38:47 »
Ak timezone nieje nastavena cez date_default_timezone_set() a ani v php.ini (tvoj pripad) tak defaultna timezona je UTC, takze 8.2 to ma spravne.

Tim jste nevysvetlil, proc to ma 8.1 jinak.

Re:php8.2 nevraci ve funkci date cas s timezone
« Odpověď #8 kdy: 13. 04. 2023, 08:48:20 »
Ja mam v gentoo config per verzi, takze mozna ti vypadl konfiguracni radek? -- vidim ze asi ne.

Udelej si tedy dump runtime nastaveni - treba z ini_get_all a udelej diff
https://www.php.net/manual/en/function.ini-get-all.php

Pripadne ten timezone zkontroluj pres date_default_timezone_get
https://www.php.net/manual/en/function.date-default-timezone-get.php

8.1 ini_get_all();
Kód: [Vybrat]
    [date.timezone] => Array
        (
            [global_value] =>
            [local_value] =>
            [access] => 7
        )

8.1 date_default_timezone_get():
Kód: [Vybrat]
2023-04-13 08:47:47
string(13) "Europe/Berlin"


8.2 ini_get_all():
Kód: [Vybrat]
    [date.timezone] => Array
        (
            [global_value] => UTC
            [local_value] => UTC
            [access] => 7
        )

8.2 date_default_timezone_get:
Kód: [Vybrat]
2023-04-13 06:47:44
string(3) "UTC"

Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #9 kdy: 13. 04. 2023, 09:42:47 »
Ve verzi 8.1 se pri nenastaveni date.timezone vzalo nastaveni systemu a PHP vyhazovalo varovani:

Kód: [Vybrat]
It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.
Je tedy otazka, jestli nemate skryta varovani.

Od verze 8.2 je toto varovani pryc a pouziva se UTC jako default.

RDa

  • *****
  • 2 567
    • Zobrazit profil
    • E-mail
Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #10 kdy: 13. 04. 2023, 09:56:51 »
Ono tam bylo dlouhou dobu warning, ktery znel takto:

Citace
Strict Standards:  date(): It is not safe to rely on the system's timezone settings.

Warning: date(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'America/New_York' for 'EDT/-4.0/DST' instead in /filelocation right here/system/libraries/Log.php on line 86

Samozrejme kdyz mas ty chybove hlasky potlaceny (produkcni nasazeni), tak se to da prehlidnout. Ale kdyz jsem je mel povoleny, nebo presmerovany do error logu a hlidal to, tak jsem si tohoto nekolikrat vsiml a donutilo me to explicitne upravit php.ini - coz je asi dobre nastavena politika, kdyz chces mit neco spolehliveho.

Pokud muzes experimentovat, mohl bys zapnout:
Kód: [Vybrat]
error_reporting = E_ALL
display_errors = stderr

U sebe nemam nastaveno v .ini nic, a obe verze produkuji UTC:

Kód: [Vybrat]
$ echo '<?php echo date("Y-m-d H:i:s T\n"), date_default_timezone_get(), "\n"?>' | /usr/bin/php8.1
2023-04-13 07:55:02 UTC
UTC
$ echo '<?php echo date("Y-m-d H:i:s T\n"), date_default_timezone_get(), "\n"?>' | /usr/bin/php8.2
2023-04-13 07:55:04 UTC
UTC

Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #11 kdy: 13. 04. 2023, 10:14:12 »
Zapnul jsem zobrazovani chyb:
Kód: [Vybrat]
root@testphp:/etc/php/8.1/cli# grep display_errors /etc/php/8.?/cli/php.ini
/etc/php/8.1/cli/php.ini:; display_errors
/etc/php/8.1/cli/php.ini:;display_errors = Off
/etc/php/8.1/cli/php.ini:display_errors = On
/etc/php/8.1/cli/php.ini:; separately from display_errors. We strongly recommend you set this to 'off'
/etc/php/8.2/cli/php.ini:; display_errors
/etc/php/8.2/cli/php.ini:;display_errors = Off
/etc/php/8.2/cli/php.ini:display_errors = On
/etc/php/8.2/cli/php.ini:; separately from display_errors. We strongly recommend you set this to 'off'

root@testphp:/etc/php/8.1/cli# grep error_reporting /etc/php/8.?/cli/php.ini
/etc/php/8.1/cli/php.ini:; error_reporting
/etc/php/8.1/cli/php.ini:;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
/etc/php/8.1/cli/php.ini:error_reporting = E_ALL
/etc/php/8.2/cli/php.ini:; error_reporting
/etc/php/8.2/cli/php.ini:;error_reporting = E_ALL & ~E_DEPRECATED & ~E_STRICT
/etc/php/8.2/cli/php.ini:error_reporting = E_ALL

Kód: [Vybrat]
root@testphp:/etc/php/8.1/cli# /usr/bin/php8.1 /opt/date.php
2023-04-13 10:08:44
string(13) "Europe/Berlin"

root@testphp:/etc/php/8.1/cli# /usr/bin/php8.2 /opt/date.php
2023-04-13 08:08:48
string(3) "UTC"

Doplnil jsem do date parametr "T":
Kód: [Vybrat]
root@testphp:/opt# cat date.php
<?php

$date 
date('Y-m-d H:i:s T');
echo 
$date;
echo 
"\n";
var_dump(date_default_timezone_get());
echo 
"\n";
?>


Kód: [Vybrat]
root@testphp:/opt# /usr/bin/php8.1 /opt/date.php
2023-04-13 10:11:26 CEST
string(13) "Europe/Berlin"

root@testphp:/opt# /usr/bin/php8.2 /opt/date.php
2023-04-13 08:11:28 UTC
string(3) "UTC"

Kód: [Vybrat]
root@testphp:/etc/php/8.1/cli# cat /etc/timezone
Europe/Prague

Dalsi zajimavost, proc vraci php timezone Europe/Berlin, kdyz mam nastaveno Europe/Prague :-)

Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #12 kdy: 13. 04. 2023, 10:16:53 »
Ve verzi 8.1 se pri nenastaveni date.timezone vzalo nastaveni systemu a PHP vyhazovalo varovani:

Kód: [Vybrat]
It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier.
Je tedy otazka, jestli nemate skryta varovani.

Od verze 8.2 je toto varovani pryc a pouziva se UTC jako default.

Tohle by bylo zrejme to, co hledam, ale kde je takovahle zmena zapsana? nejaky release notes/commit?

Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #13 kdy: 13. 04. 2023, 10:22:09 »
Dalsi zajimavost, proc vraci php timezone Europe/Berlin, kdyz mam nastaveno Europe/Prague :-)

To je asi duvod, proc se nemelo spolehat na spravnou detekci ze systemu :-)

Re:PHP 8.2 nevrací ve funkci date čas s timezone
« Odpověď #14 kdy: 13. 04. 2023, 10:33:57 »
Tohle by bylo zrejme to, co hledam, ale kde je takovahle zmena zapsana? nejaky release notes/commit?

Priznam se, ze ted jsem zmaten. U sveho tvrzeni jsem vychazel ze zmeny dokumentace default hodnoty, ktera probehla minuly rok.

Kdyz jsem se ale podival na PR, na ktery odkazuje, tak tam se zminuje commit, ktery je z roku 2015.