date_modify()
(PHP 5 >= 5.2.0, PHP 7)
别名DateTime::modify()
说明
此函数是该函数的别名:DateTime::modify()
$cday - specified day of the week (0-6 where 0 is Sunday) $currentDate - date of start $endDate - date of end We need dates of next couple of days, that day of week match defined. <?php if($currentDate->format('w')!= $cday){ switch ($cday){ case 0 : $cdays="Sunday"; break; case 1 : $cdays="Monday"; break; case 2 : $cdays="Tuesday"; break; case 3 : $cdays="Wednesday"; break; case 4 : $cdays="Thursday"; break; case 5 : $cdays="Friday"; break; case 6 : $cdays="Saturday"; } date_modify($currentDate,"+1 {$cdays}"); } while($currentDate < $endDate) { echo $currentDate -> format('Y-m-d H:i:s'); $currentDate -> modify('+1 week'); } ?>
I have trouble finding the documentation for the dateTime object, but this seems to work: <?php $currentDate = new DateTime('2008-01-04'); $endDate = new DateTime('2009-01-04'); while($currentDate < $endDate) { echo $currentDate -> format('Y-m-d') . ' till '; $currentDate -> modify('+1 week'); echo $currentDate -> format('Y-m-d') . ' <br />'; } ?> This will (obviously) print a list of date-ranges between startdate and enddate.
I decided to enhance the DateTime object by taking advantage of method chaining. <?php class DateTimeChain extends DateTime { public function modify ($modify) { parent::modify($modify); return $this; } public function setDate ($year, $month, $day) { parent::setDate($year, $month, $day); return $this; } public function setISODate ($year, $week, $day = null) { parent:: setISODate($year, $week, $day); return $this; } public function setTime ($hour, $minute, $second = null) { parent::setTime($hour, $minute, $second); return $this; } public function setTimezone ($timezone) { parent::setTimezone($timezone); return $this; } } $t = new DateTimeZone('America/Los_Angeles'); $d = new DateTimeChain(); var_dump($d->setTimezone($t)->modify('5years')->format(DATE_RFC822)); ?>