DateTime
在线手册:中文  英文

DateTime::modify

date_modify

(PHP 5 >= 5.2.0)

DateTime::modify -- date_modifyAlters the timestamp

说明

面向对象风格

public DateTime DateTime::modify ( string $modify )

过程化风格

DateTime date_modify ( DateTime $object , string $modify )

Alter the timestamp of a DateTime object by incrementing or decrementing in a format accepted by strtotime().

参数

object

仅过程化风格:由 date_create() 返回的 DateTime 类型的对象。此函数会修改这个对象。

modify

日期/时间字符串。正确格式的说明详见 日期与时间格式

返回值

返回被修改的 DateTime 对象, 或者在失败时返回 FALSE.

更新日志

版本 说明
5.3.6 Absolute date/time statements now take effect. Previously, only relative parts were used.
5.3.0将返回值从NULL改为 DateTime 类型。

范例

Example #1 DateTime::modify() example

面向对象风格

<?php
$date 
= new DateTime('2006-12-12');
$date->modify('+1 day');
echo 
$date->format('Y-m-d');
?>

过程化风格

<?php
$date 
date_create('2006-12-12');
date_modify($date'+1 day');
echo 
date_format($date'Y-m-d');
?>

以上例程会输出:

2006-12-13

Example #2 Beware when adding or subtracting months

<?php
$date 
= new DateTime('2000-12-31');

$date->modify('+1 month');
echo 
$date->format('Y-m-d') . "\n";

$date->modify('+1 month');
echo 
$date->format('Y-m-d') . "\n";
?>

以上例程会输出:

2001-01-31
2001-03-03

参见


DateTime
在线手册:中文  英文

用户评论:

Jenny jsimonds@atomic jet packs dot com (2012-04-15 21:04:34)

Note: This method modifies the object in-place. So if you want to calculate a new date but assign the new value to a different object, this will NOT work:

<?php
$numMinutes 
25;
$oDateA = new DateTime('2012-01-01 12:00:00');

print 
"
Original:<br>
oDateA =  
{$oDateA->format('Y-m-d H-i-s')}<br>
"
;

$oDateB $oDateA->modify ("+{$numMinutes} minutes");

print 
"
plus 
{$numMinutes} minutes:<br>
oDateA =  
{$oDateA->format('Y-m-d H-i-s')}<br>
oDateB =  
{$oDateB->format('Y-m-d H-i-s')}<br>
"
;
?>
...produces this:
oDateA = 2012-01-01 12-00-00
plus 25 minutes:
oDateA = 2012-01-01 12-25-00
oDateB = 2012-01-01 12-25-00

Use something like this instead:
<?php
$numMinutes 
25;
$oDateA = new DateTime('2012-01-01 12:00:00');

print 
"
<p>
Original:<br>
oDateA =  
{$oDateA->format('Y-m-d H-i-s')}<br>
"
;

$oDateB = clone $oDateA;
$oDateB->modify ("+{$numMinutes} minutes");

print 
"
plus 
{$numMinutes} minutes:<br>
oDateA =  
{$oDateA->format('Y-m-d H-i-s')}<br>
oDateB =  
{$oDateB->format('Y-m-d H-i-s')}<br>
"
;
?>

... produces this:
oDateA = 2012-01-01 12-00-00
plus 25 minutes:
oDateA = 2012-01-01 12-00-00
oDateB = 2012-01-01 12-25-00

jenspj at msn dot com (2012-02-20 14:34:55)

These functions makes sure that adding months or years always ends up in the month you would expect.  Works for positive and negative values

<?php
      
       
    $date
=new DateTime();
    
$date->setDate(2008,2,29);
    
    function 
addMonths($date,$months){
         
        
$init=clone $date;
        
$modifier=$months.' months';
        
$back_modifier =-$months.' months';
        
        
$date->modify($modifier);
        
$back_to_init= clone $date;
        
$back_to_init->modify($back_modifier);
        
        while(
$init->format('m')!=$back_to_init->format('m')){
        
$date->modify('-1 day')    ;
        
$back_to_init= clone $date;
        
$back_to_init->modify($back_modifier);    
        }
        
        
/*
        if($months<0&&$date->format('m')>$init->format('m'))
        while($date->format('m')-12-$init->format('m')!=$months%12)
        $date->modify('-1 day');
        else
        if($months>0&&$date->format('m')<$init->format('m'))
        while($date->format('m')+12-$init->format('m')!=$months%12)
        $date->modify('-1 day');
        else
        while($date->format('m')-$init->format('m')!=$months%12)
        $date->modify('-1 day');
        */
        
    
}
     
    function 
addYears($date,$years){
        
        
$init=clone $date;
        
$modifier=$years.' years';
        
$date->modify($modifier);
        
        while(
$date->format('m')!=$init->format('m'))
        
$date->modify('-1 day');
        
        
    } 
    
    
    
    
addMonths($date,-1);
     
addYears($date,3);
    
    
    echo 
$date->format('F j,Y');
     
 
?>

tom at r dot je (2009-06-18 07:43:32)

If you want to find the next working day (assuming mon-fri) you can use this:

<?php
$d 
= new DateTime();

$day $d->format('w');

if (
$day == || $day >= 5$d->modify('+' . ((7-$day+1) % 7) . ' days');
else 
$d->modify('+1 day');
?>

易百教程