<?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 ) ) );
You have javascript disabled. You will not be able to edit any code.