date_diff.phpt 1.4 KB

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