此函数是该函数的别名: DateTime::modify()
ochojnackiATEMEgmail.com (2008-08-14 05:49:49)
$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');
}
?>
matthijs at yourmediafactory dot com (2007-12-08 04:38:44)
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.
someone (2007-09-14 23:46:58)
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));
?>
mike_d_olson [at] yahoo [dot] no-spam (2007-08-08 16:17:22)
I had problems with setting an existing DateTime object to an exact Unix timestamp using modify("@$timestamp"), which seems to always be relative. So I wrote this function, which does the trick:
<?php
function set_time(DateTime $dt, $timestamp)
{
$tzo = new DateTimeZone($dt->getTimezone()->getName());
$new_dt = new DateTime("@$timestamp", new DateTimeZone('UTC'));
$new_dt->setTimezone($tzo);
$dt->setDate($new_dt->format('Y'), $new_dt->format('m'), $new_dt->format('d'));
$dt->setTime($new_dt->format('H'), $new_dt->format('i'), $new_dt->format('s'));
}
?>