3v4l.org

run code in 300+ PHP versions simultaneously
<?php function formatDates($dates) { $output = []; $evening_ranges = []; $matinees = []; $last_evening_date = null; foreach ($dates as $date) { $dateTime = new DateTime($date); $time = $dateTime->format('ga'); if ($time == '2pm') { $matinees[] = $dateTime; } else { if ($last_evening_date && $last_evening_date->modify('+1 day')->format('Y-m-d') != $dateTime->format('Y-m-d')) { if (!empty($evening_ranges)) { $output[] = formatRange($evening_ranges); } $evening_ranges = []; } $evening_ranges[] = $dateTime; $last_evening_date = clone $dateTime; } } if (!empty($evening_ranges)) { $output[] = formatRange($evening_ranges); } foreach ($matinees as $matinee) { $output[] = [$matinee]; } usort($output, function($a, $b) { return $a[0] <=> $b[0]; }); return implode(', ', array_map('formatOutput', $output)); } function formatRange($range) { $start = $range[0]; $end = end($range); if ($start->format('M') == $end->format('M')) { return [$start, $end, $start->format('ga')]; } else { return [$start, $end, $start->format('ga')]; } } function formatOutput($range) { if (count($range) == 1) { return $range[0]->format('jS M ga'); } else { $start = $range[0]; $end = $range[1]; $time = $range[2]; if ($start->format('M') == $end->format('M')) { return $start->format('jS') . '-' . $end->format('jS M') . ' ' . $time; } else { return $start->format('jS M') . '-' . $end->format('jS M') . ' ' . $time; } } } $dates = [ '2014-01-20 20:00:00', '2014-01-21 20:00:00', '2014-01-22 14:00:00', '2014-01-22 20:00:00', '2014-01-23 20:00:00', '2014-01-25 20:00:00', '2014-01-26 20:00:00', '2014-01-31 20:00:00', '2014-02-01 20:00:00' ]; echo formatDates($dates); ?>

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.4.130.0130.00818.61
8.4.120.0140.00523.96
8.4.110.0110.00719.01
8.4.100.0090.01018.79
8.4.90.0100.01120.63
8.4.80.0110.00918.74
8.4.70.0140.00719.10
8.4.60.0110.00918.90
8.4.50.0050.00418.72
8.4.40.0140.00317.90
8.4.30.0060.01319.00
8.4.20.0110.00721.66
8.4.10.0040.00419.59
8.3.260.0130.00616.72
8.3.250.0140.00519.23
8.3.240.0070.00117.23
8.3.230.0060.00316.76
8.3.220.0080.00019.09
8.3.210.0110.00818.49
8.3.200.0070.00116.49
8.3.190.0090.00621.04
8.3.180.0080.00618.93
8.3.170.0060.01219.10
8.3.160.0130.00716.67
8.3.150.0050.00317.28
8.3.140.0040.00417.16
8.3.130.0000.00818.39
8.3.120.0100.01019.07
8.3.110.0030.00616.74
8.3.100.0050.00516.70
8.3.90.0090.00018.71
8.3.80.0390.01030.84
8.3.70.0400.01030.84
8.3.60.0480.00330.84
8.3.50.0140.00730.84
8.3.40.0340.00530.84
8.3.30.0350.00430.84
8.3.20.0370.00630.84
8.3.10.0320.00930.84
8.3.00.0350.00530.84
8.2.290.0040.00420.21
8.2.280.0040.00520.30
8.2.270.0040.01417.33
8.2.260.0120.00618.65
8.2.250.0150.00017.05
8.2.240.0100.01017.41
8.2.230.0000.00920.94
8.2.220.0040.01424.06
8.2.210.0060.00326.77
8.2.200.0370.00230.84
8.2.190.0300.01030.84
8.2.180.0330.00930.84
8.2.170.0300.00830.84
8.2.160.0310.00830.84
8.2.150.0280.00730.84
8.2.140.0190.00830.84
8.2.130.0260.00530.84
8.2.120.0290.00230.84
8.2.110.0240.00830.84
8.2.100.0260.00530.84
8.2.90.0240.00630.84
8.2.80.0230.00830.84
8.2.70.0250.00530.84
8.2.60.0250.00530.84
8.2.50.0250.01030.84
8.2.40.0270.01030.84
8.2.30.0300.00730.84
8.2.20.0250.01330.84
8.2.10.0380.00630.84
8.2.00.0300.01030.84
8.1.330.0130.00521.85
8.1.320.0130.00916.17
8.1.310.0050.00517.02
8.1.300.0150.00419.73
8.1.290.0350.00730.84
8.1.280.0250.01530.84
8.1.270.0380.00830.84
8.1.260.0320.01430.84
8.1.250.0380.00730.84
8.1.240.0350.00530.84
8.1.230.0250.00830.84
8.1.220.0190.00830.84
8.1.210.0340.00830.84
8.1.200.0290.00630.84
8.1.190.0300.00630.84
8.1.180.0280.01230.84
8.1.170.0340.00530.84
8.1.160.0300.01230.84
8.1.150.0300.00530.84
8.1.140.0230.00430.84
8.1.130.0270.00530.84
8.1.120.0160.01330.84
8.1.110.0230.01230.84
8.1.100.0320.00430.84
8.1.90.0270.00830.84
8.1.80.0230.00430.84
8.1.70.0260.00730.84
8.1.60.0330.00730.84
8.1.50.0310.00830.84
8.1.40.0410.00530.84
8.1.30.0240.00730.84
8.1.20.0270.00530.84
8.1.10.0230.00830.84
8.1.00.0270.00430.84

preferences:
27.15 ms | 403 KiB | 5 Q