3v4l.org

run code in 300+ PHP versions simultaneously
<?php function munge( $s ) { $segments = preg_split( '/([{}])/', $s, -1, PREG_SPLIT_DELIM_CAPTURE ); $level = 0; for ( $i = 0, $len = count( $segments ); $i < $len; $i++ ) { if ( $level === 0 && str_starts_with( $segments[$i], 'O:10:"DatePeriod":' ) ) { $level = 1; $dp_header_index = $i; $i++; // consume opening '{' of DatePeriod object $has_include_end_date = false; } elseif ( $level ) { if ( $segments[$i] === '{' ) { $level++; } elseif ( $segments[$i] === '}' ) { $level--; if ( !$level ) { // end of DatePeriod object if( !$has_include_end_date ) { // append 'include_end_date' property $segments[$i] = 's:16:"include_end_date";b:0;}'; // adjust object header $dp_header = $segments[$dp_header_index]; $dp_header_parts = explode( ':', $dp_header ); // 'O', class name length, class name, # of props $dp_header_parts[3] += 1; $dp_header = implode( ':', $dp_header_parts ); $segments[$dp_header_index] = $dp_header; } } } elseif ( $level === 1 ) { if ( preg_match( '/(^|;)s:16:"include_end_date";b:/', $segments[$i] ) ) { // serialization was generated in PHP 8.2+ $has_include_end_date = true; } } else { // Nested object inside DatePeriod, ignore. A DatePeriod can't contain another DatePeriod. } } } return implode( $segments ); } $php81_dp = 'O:10:"DatePeriod":6:{s:5:"start";O:8:"DateTime":3:{s:4:"date";s:26:"2025-10-15 16:50:00.000000";s:13:"timezone_type";i:3;s:8:"timezone";s:16:"Europe/Amsterdam";}s:7:"current";N;s:3:"end";N;s:8:"interval";O:12:"DateInterval":16:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:1;s:1:"h";i:0;s:1:"i";i:0;s:1:"s";i:0;s:1:"f";d:0;s:7:"weekday";i:0;s:16:"weekday_behavior";i:0;s:17:"first_last_day_of";i:0;s:6:"invert";i:0;s:4:"days";b:0;s:12:"special_type";i:0;s:14:"special_amount";i:0;s:21:"have_weekday_relative";i:0;s:21:"have_special_relative";i:0;}s:11:"recurrences";i:4;s:18:"include_start_date";b:1;}'; $php83_dp = 'O:10:"DatePeriod":7:{s:5:"start";O:8:"DateTime":3:{s:4:"date";s:26:"2025-10-15 16:50:00.000000";s:13:"timezone_type";i:3;s:8:"timezone";s:16:"Europe/Amsterdam";}s:7:"current";N;s:3:"end";N;s:8:"interval";O:12:"DateInterval":10:{s:1:"y";i:0;s:1:"m";i:0;s:1:"d";i:1;s:1:"h";i:0;s:1:"i";i:0;s:1:"s";i:0;s:1:"f";d:0;s:6:"invert";i:0;s:4:"days";b:0;s:11:"from_string";b:0;}s:11:"recurrences";i:4;s:18:"include_start_date";b:1;s:16:"include_end_date";b:0;}'; var_dump( munge( $php81_dp ) ); var_dump( munge( $php83_dp ) ); var_dump( unserialize( munge( $php81_dp ) ) ); var_dump( unserialize( munge( $php83_dp ) ) );

Here you find the average performance (time & memory) of each version. A grayed out version indicates it didn't complete successfully (based on exit-code).

VersionSystem time (s)User time (s)Memory (MiB)
8.5.30.0110.00717.97
8.5.20.0080.01120.27
8.5.10.0120.00717.44
8.5.00.0120.01123.19
8.4.180.0150.00820.32
8.4.170.0100.01323.97
8.4.160.0120.01224.03
8.4.150.0020.00014.05
8.4.140.0040.00618.27
8.4.130.0120.00920.03
8.4.120.0150.00720.50
8.4.90.0140.00820.08
8.3.300.0150.00619.58
8.3.290.0170.00619.04
8.3.280.0120.00919.04
8.3.270.0120.01117.36
8.3.260.0130.00817.35
8.3.250.0140.00719.12
8.3.180.0130.00919.01
8.3.50.0130.00718.57
8.2.300.0140.01018.69
8.1.340.0140.00920.18

preferences:
42.04 ms | 403 KiB | 5 Q