1--TEST-- 2Test DateInterval::__serialize and DateInterval::__unserialize 3--FILE-- 4<?php 5date_default_timezone_set("Europe/London"); 6 7$d1 = new DateTimeImmutable("1978-12-22 09:15 CET"); 8$d2 = new DateTimeImmutable("2022-04-15 10:27:27 BST"); 9 10$d = $d1->diff($d2); 11echo "Original object:\n"; 12var_dump($d); 13 14echo "\n\nSerialised object:\n"; 15$s = serialize($d); 16var_dump($s); 17 18echo "\n\nUnserialised object:\n"; 19$e = unserialize($s); 20var_dump($e); 21 22echo "\n\nCalling __serialize manually:\n"; 23var_dump($d->__serialize()); 24 25echo "\n\nCalling __unserialize manually:\n"; 26$d = new DateInterval('P2Y4DT6H8M'); 27$d->__unserialize( 28 [ 29 'y' => 43, 30 'm' => 3, 31 'd' => 24, 32 'h' => 1, 33 'i' => 12, 34 's' => 27, 35 'f' => 0.654321, 36 'days' => 15820, 37 ] 38); 39var_dump($d); 40 41echo "\n\nUsed serialised interval:\n"; 42$now = new DateTimeImmutable("2022-04-15 10:27:27 BST"); 43var_dump($now->add($e)); 44var_dump($now->sub($e)); 45?> 46--EXPECTF-- 47Original object: 48object(DateInterval)#3 (10) { 49 ["y"]=> 50 int(43) 51 ["m"]=> 52 int(3) 53 ["d"]=> 54 int(24) 55 ["h"]=> 56 int(1) 57 ["i"]=> 58 int(12) 59 ["s"]=> 60 int(27) 61 ["f"]=> 62 float(0) 63 ["invert"]=> 64 int(0) 65 ["days"]=> 66 int(15820) 67 ["from_string"]=> 68 bool(false) 69} 70 71 72Serialised object: 73string(172) "O:12:"DateInterval":10:{s:1:"y";i:43;s:1:"m";i:3;s:1:"d";i:24;s:1:"h";i:1;s:1:"i";i:12;s:1:"s";i:27;s:1:"f";d:0;s:6:"invert";i:0;s:4:"days";i:15820;s:11:"from_string";b:0;}" 74 75 76Unserialised object: 77object(DateInterval)#4 (10) { 78 ["y"]=> 79 int(43) 80 ["m"]=> 81 int(3) 82 ["d"]=> 83 int(24) 84 ["h"]=> 85 int(1) 86 ["i"]=> 87 int(12) 88 ["s"]=> 89 int(27) 90 ["f"]=> 91 float(0) 92 ["invert"]=> 93 int(0) 94 ["days"]=> 95 int(15820) 96 ["from_string"]=> 97 bool(false) 98} 99 100 101Calling __serialize manually: 102array(%d) { 103 ["y"]=> 104 int(43) 105 ["m"]=> 106 int(3) 107 ["d"]=> 108 int(24) 109 ["h"]=> 110 int(1) 111 ["i"]=> 112 int(12) 113 ["s"]=> 114 int(27) 115 ["f"]=> 116 float(0) 117 ["invert"]=> 118 int(0) 119 ["days"]=> 120 int(15820) 121 ["from_string"]=> 122 bool(false) 123} 124 125 126Calling __unserialize manually: 127object(DateInterval)#5 (10) { 128 ["y"]=> 129 int(43) 130 ["m"]=> 131 int(3) 132 ["d"]=> 133 int(24) 134 ["h"]=> 135 int(1) 136 ["i"]=> 137 int(12) 138 ["s"]=> 139 int(27) 140 ["f"]=> 141 float(0.654321) 142 ["invert"]=> 143 int(0) 144 ["days"]=> 145 int(15820) 146 ["from_string"]=> 147 bool(false) 148} 149 150 151Used serialised interval: 152object(DateTimeImmutable)#6 (3) { 153 ["date"]=> 154 string(26) "2065-08-08 11:39:54.000000" 155 ["timezone_type"]=> 156 int(2) 157 ["timezone"]=> 158 string(3) "BST" 159} 160object(DateTimeImmutable)#6 (3) { 161 ["date"]=> 162 string(26) "1978-12-22 09:15:00.000000" 163 ["timezone_type"]=> 164 int(2) 165 ["timezone"]=> 166 string(3) "BST" 167} 168