3v4l.org

run code in 500+ PHP versions simultaneously
#!/usr/bin/env php <?php /** * Une date au format "YYYY-MM-DD HH:II:SS" n'est pas absolue et peut correspondre à plusieurs timestamps. * Lors du passage à l'heure d'hiver on a cette correspondance : * * ts 1540684800 = 2018-10-28T02:00:00+02:00 * ts 1540688400 = 2018-10-28T02:00:00+01:00 * ts 1540692000 = 2018-10-28T03:00:00+01:00 * * php via sa fonction mktime() permet de générer un timestamp (en interprétant les données dans la timezone définie dans le script). * * J'ai remarqué qu'en fournissant "2018-10-28 02:00:00" (avec un TZ Europe/Paris) le timestamp retourné est celui de la 2ème tranche de 02h (1540688400) * Oui mais ce comportement a changé au cours des versions de php !!! * Depuis la 8.1.7 le timestamp retourné correspond maintenant à la 1ère tranche de 02h (1540684800) * * Test sur plusieurs versions : * https://3v4l.org/8rC1Y * * Alors oui ça part d'un bon sentiment d'éradiquer des bugs : * - https://www.php.net/ChangeLog-8.php#8.1.7 * - https://bugs.php.net/bug.php?id=68549 */ date_default_timezone_set('Europe/Paris'); $tz = date_default_timezone_get(); $datetime = '2018-10-28 02:00:00'; // ambigü car passage à l'heure d'hiver $year = (int) substr($datetime, 0, 4); $month = (int) substr($datetime, 5, 2); $day = (int) substr($datetime, 8, 2); $hour = (int) substr($datetime, 11, 2); $minute = (int) substr($datetime, 14, 2); $second = (int) substr($datetime, 17, 2); $ts = mktime($hour, $minute, $second, $month, $day, $year); $offset = intval(date('Z', $ts) / 3600); // pour Europe/Paris: +1 ou +2 echo $tz . ' ' . $datetime . ' : timestamp=' . $ts . ' offset=' . $offset . "\n";
Output for 8.1.7 - 8.1.34, 8.2.0 - 8.2.30, 8.3.0 - 8.3.30, 8.4.1 - 8.4.18, 8.5.0 - 8.5.3
Europe/Paris 2018-10-28 02:00:00 : timestamp=1540684800 offset=2
Output for 5.1.0 - 5.1.6, 5.2.0 - 5.2.17, 5.3.0 - 5.3.29, 5.4.0 - 5.4.45, 5.5.0 - 5.5.38, 5.6.0 - 5.6.40, 7.0.0 - 7.0.33, 7.1.0 - 7.1.33, 7.2.0 - 7.2.34, 7.3.0 - 7.3.33, 7.4.0 - 7.4.33, 8.0.0 - 8.0.30, 8.1.0 - 8.1.6
Europe/Paris 2018-10-28 02:00:00 : timestamp=1540688400 offset=1
Output for 5.0.0 - 5.0.5
Fatal error: Call to undefined function date_default_timezone_set() in /in/DO9AE on line 26
Process exited with code 255.
Output for 4.4.5 - 4.4.9
Fatal error: Call to undefined function: date_default_timezone_set() in /in/DO9AE on line 26
Process exited with code 255.
Output for 4.3.2 - 4.3.11, 4.4.0 - 4.4.4
Fatal error: Call to undefined function: date_default_timezone_set() in /in/DO9AE on line 26
Process exited with code 255.
Output for 4.3.0 - 4.3.1
Fatal error: Call to undefined function: date_default_timezone_set() in /in/DO9AE on line 26

preferences:
67.84 ms | 2698 KiB | 4 Q