1--TEST-- 2Extensive test for date_diff(). 3--SKIPIF-- 4<?php 5if (getenv("SKIP_SLOW_TESTS")) die("skip slow test"); 6?> 7--INI-- 8date.timezone=UTC 9--FILE-- 10<?php 11$ok = 0; 12define( 'COUNT', 120 ); 13$d0 = new DateTime('2009-11-20'); 14for ( $i = 0; $i < COUNT * 12; $i++ ) 15{ 16 $d = clone $d0; 17 $dates[$i] = $d->add( new DateInterval( "P{$i}D" ) ); 18} 19 20for ( $i = 0; $i < COUNT; $i++) 21{ 22// echo $dates[$i]->format( "Y-m-d\n" ); 23 for ( $j = 0; $j < COUNT * 12; $j++) 24 { 25 $diff = date_diff( $dates[$i], $dates[$j] ); 26 /* 27 printf( "\t%s %s %3d %s\n", 28 $dates[$i]->format( 'Y-m-d' ), 29 $dates[$j]->format( 'Y-m-d' ), 30 $diff->format( '%a' ), 31 $diff->format( '%y-%m-%d' ) 32 ); 33 */ 34 35 $current = clone $dates[$i]; 36 $int = new DateInterval( $diff->format( 'P%yY%mM%dD' ) ); 37 if ( $current > $dates[$j] ) 38 { 39 $current->sub( $int ); 40 } 41 else 42 { 43 $current->add( $int ); 44 } 45 if ( $current != $dates[$j] ) 46 { 47 echo "FAIL: ", 48 $dates[$i]->format( 'Y-m-d' ), " + ", 49 $int->format( '%y-%m-%d' ), " = ", 50 $current->format( 'Y-m-d' ), " (", 51 $dates[$j]->format( 'Y-m-d' ), ")\n"; 52 } 53 else 54 { 55 $ok++; 56 } 57 } 58} 59 60echo $ok, "\n"; 61?> 62--EXPECT-- 63172800 64