Date/Time 函数
在线手册:中文  英文

date_modify

(PHP 5 >= 5.2.0)

date_modify别名 DateTime::modify()

说明

此函数是该函数的别名: DateTime::modify()


Date/Time 函数
在线手册:中文  英文

用户评论:

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 
$cdays="Sunday"; break;
            case 
$cdays="Monday"; break;
            case 
$cdays="Tuesday"; break;
            case 
$cdays="Wednesday"; break;
            case 
$cdays="Thursday"; break;
            case 
$cdays="Friday"; break;
            case 
$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'));
    }
?>

易百教程