date_time_fractions.phpt 2.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. --TEST--
  2. Fractions with DateTime objects
  3. --INI--
  4. date.timezone=UTC
  5. --FILE--
  6. <?php
  7. /* This will go wrong, once in a million times */
  8. $ms = date_create()->format('u');
  9. echo ($ms = 0) ? "microseconds = false\n" : "microseconds = true\n";
  10. /* Normal creation */
  11. echo date_create( "2016-10-03 12:47:18.819313" )->format( "Y-m-d H:i:s.u" ), "\n\n";
  12. /* With modifications */
  13. $dt = new DateTimeImmutable( "2016-10-03 12:47:18.819210" );
  14. echo $dt->modify( "+1 day" )->format( "Y-m-d H:i:s.u" ), "\n";
  15. $dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" );
  16. echo $dt->modify( "-3 months" )->format( "Y-m-d H:i:s.u" ), "\n";
  17. echo "\n";
  18. /* These should reset the time (and hence fraction) to 0 */
  19. $dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" );
  20. echo $dt->modify( "yesterday" )->format( "Y-m-d H:i:s.u" ), "\n";
  21. $dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" );
  22. echo $dt->modify( "noon" )->format( "Y-m-d H:i:s.u" ), "\n";
  23. $dt = new DateTimeImmutable( "2016-10-03 12:47:18.081921" );
  24. echo $dt->modify( "10 weekday" )->format( "Y-m-d H:i:s.u" ), "\n";
  25. /* Interval containing fractions */
  26. $dt1 = new DateTimeImmutable( "2016-10-03 13:20:07.103123" );
  27. $dt2 = new DateTimeImmutable( "2016-10-03 13:20:07.481312" );
  28. $diff = $dt1->diff( $dt2 );
  29. var_dump( $diff );
  30. $dt0 = $dt1->sub( $diff );
  31. $dt3 = $dt2->add( $diff );
  32. $dt4 = $dt3->add( $diff );
  33. echo $dt0->format( "Y-m-d H:i:s.u" ), "\n";
  34. echo $dt1->format( "Y-m-d H:i:s.u" ), "\n";
  35. echo $dt2->format( "Y-m-d H:i:s.u" ), "\n";
  36. echo $dt3->format( "Y-m-d H:i:s.u" ), "\n";
  37. echo $dt4->format( "Y-m-d H:i:s.u" ), "\n";
  38. ?>
  39. --EXPECTF--
  40. microseconds = true
  41. 2016-10-03 12:47:18.819313
  42. 2016-10-04 12:47:18.819210
  43. 2016-07-03 12:47:18.081921
  44. 2016-10-02 00:00:00.000000
  45. 2016-10-03 12:00:00.000000
  46. 2016-10-17 12:47:18.081921
  47. object(DateInterval)#%d (16) {
  48. ["y"]=>
  49. int(0)
  50. ["m"]=>
  51. int(0)
  52. ["d"]=>
  53. int(0)
  54. ["h"]=>
  55. int(0)
  56. ["i"]=>
  57. int(0)
  58. ["s"]=>
  59. int(0)
  60. ["f"]=>
  61. float(0.378189)
  62. ["weekday"]=>
  63. int(0)
  64. ["weekday_behavior"]=>
  65. int(0)
  66. ["first_last_day_of"]=>
  67. int(0)
  68. ["invert"]=>
  69. int(0)
  70. ["days"]=>
  71. int(0)
  72. ["special_type"]=>
  73. int(0)
  74. ["special_amount"]=>
  75. int(0)
  76. ["have_weekday_relative"]=>
  77. int(0)
  78. ["have_special_relative"]=>
  79. int(0)
  80. }
  81. 2016-10-03 13:20:06.724934
  82. 2016-10-03 13:20:07.103123
  83. 2016-10-03 13:20:07.481312
  84. 2016-10-03 13:20:07.859501
  85. 2016-10-03 13:20:08.237690