3v4l.org

run code in 300+ PHP versions simultaneously
<?php declare(strict_types=1); error_reporting(E_ALL); function check( string $label, ?int $constructor, ?int $setTimestamp, string $initTimezone, string $expected, int $expectedOffset ): bool { date_default_timezone_set($initTimezone); $dt = $constructor === null ? new \DateTimeImmutable() : new \DateTimeImmutable('@' . $constructor); if ($setTimestamp !== null) { $dt = $dt->setTimestamp($setTimestamp); } $formatted = $dt->format(\DateTimeInterface::RFC2822); $dtOffset = $dt->getOffset(); $valid = ( $formatted === $expected && $dtOffset === $expectedOffset && $dt->getTimestamp() === ($setTimestamp ?? $constructor ?? '') ); echo '--------------------------------------------------------------' . PHP_EOL; echo 'LABEL.....: ' . $label . PHP_EOL; echo 'INIT_TZ...: ' . $initTimezone . PHP_EOL; echo 'DT_OFFSET.: ' . $dtOffset . PHP_EOL; echo 'EXP_OFFSET: ' . $expectedOffset . PHP_EOL; echo 'EXPECTED..: ' . $expected . PHP_EOL; echo 'FORMATTED.: ' . $formatted . PHP_EOL; echo 'IS_VALID..: ' . ($valid ? 'Y' : 'N') . PHP_EOL; echo '--------------------------------------------------------------' . PHP_EOL; echo PHP_EOL; return $valid; } // 'D, d M Y H:i:s O' // TIME 1712171982 // GMT Wed Apr 03 2024 19:19:42 GMT+0000 // MSZ Wed Apr 03 2024 21:19:42 GMT+0200 (Mitteleuropäische Sommerzeit) $utcUnixTimestamp = 1712171982; $checks = [ // UTC [ 'constructor' => $utcUnixTimestamp, 'setTimestamp' => null, 'initTimezone' => 'UTC', 'expected' => 'Wed, 03 Apr 2024 19:19:42 +0000', 'expectedOffset' => 0, ], [ 'constructor' => null, 'setTimestamp' => $utcUnixTimestamp, 'initTimezone' => 'UTC', 'expected' => 'Wed, 03 Apr 2024 19:19:42 +0000', 'expectedOffset' => 0, ], // Europe/Berlin [ 'constructor' => $utcUnixTimestamp, 'setTimestamp' => null, 'initTimezone' => 'Europe/Berlin', 'expected' => 'Wed, 03 Apr 2024 19:19:42 +0000', 'expectedOffset' => 0, ], [ 'constructor' => null, 'setTimestamp' => $utcUnixTimestamp, 'initTimezone' => 'Europe/Berlin', 'expected' => 'Wed, 03 Apr 2024 21:19:42 +0200', 'expectedOffset' => 7200, // 2 * 60 * 60 ], // Canada/Atlantic [ 'constructor' => $utcUnixTimestamp, 'setTimestamp' => null, 'initTimezone' => 'Canada/Atlantic', 'expected' => 'Wed, 03 Apr 2024 19:19:42 +0000', 'expectedOffset' => 0, ], [ 'constructor' => null, 'setTimestamp' => $utcUnixTimestamp, 'initTimezone' => 'Canada/Atlantic', 'expected' => 'Wed, 03 Apr 2024 16:19:42 -0300', 'expectedOffset' => -10800, // -3 * 60 * 60 ], ]; $total = 0; $failed = 0; foreach ($checks as $check) { $total++; extract($check, EXTR_OVERWRITE); $label = sprintf( '#%s TZ: %s CONSTRUCTOR: %s SETTIMESTAMP: %s', $total, $initTimezone, ($constructor === null ? 'N' : 'Y'), ($setTimestamp === null ? 'N' : 'Y') ); if (!check($label, $constructor, $setTimestamp, $initTimezone, $expected, $expectedOffset)) { $failed++; } } echo PHP_EOL; echo "TOTAL.: " . $total . PHP_EOL; echo "FAILED: " . $failed . PHP_EOL; echo PHP_EOL;
Output for 8.1.0 - 8.1.33, 8.2.0 - 8.2.29, 8.3.0 - 8.3.28, 8.4.1 - 8.4.14, 8.5.0
-------------------------------------------------------------- LABEL.....: #1 TZ: UTC CONSTRUCTOR: Y SETTIMESTAMP: N INIT_TZ...: UTC DT_OFFSET.: 0 EXP_OFFSET: 0 EXPECTED..: Wed, 03 Apr 2024 19:19:42 +0000 FORMATTED.: Wed, 03 Apr 2024 19:19:42 +0000 IS_VALID..: Y -------------------------------------------------------------- -------------------------------------------------------------- LABEL.....: #2 TZ: UTC CONSTRUCTOR: N SETTIMESTAMP: Y INIT_TZ...: UTC DT_OFFSET.: 0 EXP_OFFSET: 0 EXPECTED..: Wed, 03 Apr 2024 19:19:42 +0000 FORMATTED.: Wed, 03 Apr 2024 19:19:42 +0000 IS_VALID..: Y -------------------------------------------------------------- -------------------------------------------------------------- LABEL.....: #3 TZ: Europe/Berlin CONSTRUCTOR: Y SETTIMESTAMP: N INIT_TZ...: Europe/Berlin DT_OFFSET.: 0 EXP_OFFSET: 0 EXPECTED..: Wed, 03 Apr 2024 19:19:42 +0000 FORMATTED.: Wed, 03 Apr 2024 19:19:42 +0000 IS_VALID..: Y -------------------------------------------------------------- -------------------------------------------------------------- LABEL.....: #4 TZ: Europe/Berlin CONSTRUCTOR: N SETTIMESTAMP: Y INIT_TZ...: Europe/Berlin DT_OFFSET.: 7200 EXP_OFFSET: 7200 EXPECTED..: Wed, 03 Apr 2024 21:19:42 +0200 FORMATTED.: Wed, 03 Apr 2024 21:19:42 +0200 IS_VALID..: Y -------------------------------------------------------------- -------------------------------------------------------------- LABEL.....: #5 TZ: Canada/Atlantic CONSTRUCTOR: Y SETTIMESTAMP: N INIT_TZ...: Canada/Atlantic DT_OFFSET.: 0 EXP_OFFSET: 0 EXPECTED..: Wed, 03 Apr 2024 19:19:42 +0000 FORMATTED.: Wed, 03 Apr 2024 19:19:42 +0000 IS_VALID..: Y -------------------------------------------------------------- -------------------------------------------------------------- LABEL.....: #6 TZ: Canada/Atlantic CONSTRUCTOR: N SETTIMESTAMP: Y INIT_TZ...: Canada/Atlantic DT_OFFSET.: -10800 EXP_OFFSET: -10800 EXPECTED..: Wed, 03 Apr 2024 16:19:42 -0300 FORMATTED.: Wed, 03 Apr 2024 16:19:42 -0300 IS_VALID..: Y -------------------------------------------------------------- TOTAL.: 6 FAILED: 0
Output for 8.4.15
/bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libm.so.6: version `GLIBC_2.35' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.34' not found (required by /bin/php-8.4.15) /bin/php-8.4.15: /usr/lib/libc.so.6: version `GLIBC_2.38' not found (required by /bin/php-8.4.15)
Process exited with code 1.

preferences:
105.73 ms | 410 KiB | 5 Q