RecurrenceCollection.php 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  1. <?php
  2. /*
  3. * Copyright 2014 Shaun Simmons
  4. *
  5. * For the full copyright and license information, please view the LICENSE
  6. * file that was distributed with this source code.
  7. */
  8. namespace Recurr;
  9. use \Doctrine\Common\Collections\ArrayCollection as BaseCollection;
  10. /**
  11. * @package Recurr
  12. * @author Shaun Simmons <shaun@envysphere.com>
  13. */
  14. class RecurrenceCollection extends BaseCollection
  15. {
  16. /**
  17. * @param \DateTimeInterface $after
  18. * @param \DateTimeInterface $before
  19. * @param bool $inc Include $after or $before if they happen to be a recurrence.
  20. *
  21. * @return RecurrenceCollection
  22. */
  23. public function startsBetween(\DateTimeInterface $after, \DateTimeInterface $before, $inc = false)
  24. {
  25. return $this->filter(
  26. function ($recurrence) use ($after, $before, $inc) {
  27. /** @var $recurrence Recurrence */
  28. $start = $recurrence->getStart();
  29. if ($inc) {
  30. return $start >= $after && $start <= $before;
  31. }
  32. return $start > $after && $start < $before;
  33. }
  34. );
  35. }
  36. /**
  37. * @param \DateTimeInterface $before
  38. * @param bool $inc Include $before if it is a recurrence.
  39. *
  40. * @return RecurrenceCollection
  41. */
  42. public function startsBefore(\DateTimeInterface $before, $inc = false)
  43. {
  44. return $this->filter(
  45. function ($recurrence) use ($before, $inc) {
  46. /** @var $recurrence Recurrence */
  47. $start = $recurrence->getStart();
  48. if ($inc) {
  49. return $start <= $before;
  50. }
  51. return $start < $before;
  52. }
  53. );
  54. }
  55. /**
  56. * @param \DateTimeInterface $after
  57. * @param bool $inc Include $after if it a recurrence.
  58. *
  59. * @return RecurrenceCollection
  60. */
  61. public function startsAfter(\DateTimeInterface $after, $inc = false)
  62. {
  63. return $this->filter(
  64. function ($recurrence) use ($after, $inc) {
  65. /** @var $recurrence Recurrence */
  66. $start = $recurrence->getStart();
  67. if ($inc) {
  68. return $start >= $after;
  69. }
  70. return $start > $after;
  71. }
  72. );
  73. }
  74. /**
  75. * @param \DateTimeInterface $after
  76. * @param \DateTimeInterface $before
  77. * @param bool $inc Include $after or $before if they happen to be a recurrence.
  78. *
  79. * @return RecurrenceCollection
  80. */
  81. public function endsBetween(\DateTimeInterface $after, \DateTimeInterface $before, $inc = false)
  82. {
  83. return $this->filter(
  84. function ($recurrence) use ($after, $before, $inc) {
  85. /** @var $recurrence Recurrence */
  86. $end = $recurrence->getEnd();
  87. if ($inc) {
  88. return $end >= $after && $end <= $before;
  89. }
  90. return $end > $after && $end < $before;
  91. }
  92. );
  93. }
  94. /**
  95. * @param \DateTimeInterface $before
  96. * @param bool $inc Include $before if it is a recurrence.
  97. *
  98. * @return RecurrenceCollection
  99. */
  100. public function endsBefore(\DateTimeInterface $before, $inc = false)
  101. {
  102. return $this->filter(
  103. function ($recurrence) use ($before, $inc) {
  104. /** @var $recurrence Recurrence */
  105. $end = $recurrence->getEnd();
  106. if ($inc) {
  107. return $end <= $before;
  108. }
  109. return $end < $before;
  110. }
  111. );
  112. }
  113. /**
  114. * @param \DateTimeInterface $after
  115. * @param bool $inc Include $after if it a recurrence.
  116. *
  117. * @return RecurrenceCollection
  118. */
  119. public function endsAfter(\DateTimeInterface $after, $inc = false)
  120. {
  121. return $this->filter(
  122. function ($recurrence) use ($after, $inc) {
  123. /** @var $recurrence Recurrence */
  124. $end = $recurrence->getEnd();
  125. if ($inc) {
  126. return $end >= $after;
  127. }
  128. return $end > $after;
  129. }
  130. );
  131. }
  132. }