downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

DateTime::__wakeup> <DateTime::setTimezone
Last updated: Fri, 20 May 2011

view this page in

DateTime::sub

(PHP 5 >= 5.3.0)

DateTime::sub Sustrae una cantidad de días, meses, años, horas, minutos y segundos de un objeto DateTime

Descripción

Estilo orientado a objetos

public DateTime DateTime::sub ( DateInterval $interval )

Estilo por procesos

DateTime date_sub ( DateTime $object , DateInterval $interval )

Sustrae el objeto DateInterval especificado del objeto DateTime especificado.

Parámetros

object

Estilo por procesos solamente: Un objeto DateTime devuelto por date_create(). La función modifica este objeto.

interval

Un objeto DateInterval

Valores devueltos

Devuelve el objecto DateTime por el método encadenado o FALSE en caso de error.

Ejemplos

Example #1 Ejemplo de DateTime::sub()

Estilo orientado a objetos

<?php
$fecha 
= new DateTime('2000-01-20');
$fecha->sub(new DateInterval('P10D'));
echo 
$fecha->format('Y-m-d') . "\n";
?>

Estilo por procesos

<?php
$fecha 
date_create('2000-01-20');
date_sub($fechadate_interval_create_from_date_string('10 days'));
echo 
date_format($fecha'Y-m-d');
?>

El resultado de los ejemplos serían:

2000-01-10

Example #2 Más ejemplos de DateTime::sub()

<?php
$fecha 
= new DateTime('2000-01-20');
$fecha->sub(new DateInterval('PT10H30S'));
echo 
$fecha->format('Y-m-d H:i:s') . "\n";

$fecha = new DateTime('2000-01-20');
$fecha->sub(new DateInterval('P7Y5M4DT4H3M2S'));
echo 
$fecha->format('Y-m-d H:i:s') . "\n";
?>

El resultado del ejemplo sería:

2000-01-19 13:59:30
1992-08-15 19:56:58

Example #3 Cuidado al sustraer meses

<?php
$fecha 
= new DateTime('2001-04-30');
$intervalo = new DateInterval('P1M');

$fecha->sub($intervalo);
echo 
$fecha->format('Y-m-d') . "\n";

$fecha->sub($intervalo);
echo 
$fecha->format('Y-m-d') . "\n";
?>

El resultado del ejemplo sería:

2001-03-30
2001-03-02

Notas

DateTime::modify() es una alternativa cuando se usa PHP 5.2.

Ver también



add a note add a note User Contributed Notes DateTime::sub
Anonymous 01-Feb-2011 10:15
Note that the sub() and add() methods will modify the value of the object you're calling the method on! This is very untypical for a method that returns a value of its own type. You could misunderstand it that the method would return a new instance with the modified value, but in fact it modifies itself! This is undocumented here. (Only a side note on procedural style mentions it, but it obviously does not apply to object oriented style.)
php at keith tyler dot com 01-Dec-2010 02:53
If you use diff() after sub(), the effects of the sub() will be repeated on the date object.

It doesn't matter if the object is the one diffed or doing the diffing (i.e. which object you call diff() from).

<?php
$today
= new DateTime();
$newdate = new DateTime();

print_r($newdate);
$newdate->sub(new DateInterval("PT1S"));
print_r($newdate);
$s = $newdate->diff($today);
print_r($newdate);
$s = $today->diff($newdate);
print_r($newdate);
$s = $today->diff($newdate);
print_r($newdate);
?>

Prints:

DateTime Object
(
    [date] => 2010-11-30 18:43:48
    [timezone_type] => 3
    [timezone] => America/Los_Angeles
)
DateTime Object
(
    [date] => 2010-11-30 18:43:47
    [timezone_type] => 3
    [timezone] => America/Los_Angeles
)
DateTime Object
(
    [date] => 2010-11-30 18:43:46
    [timezone_type] => 3
    [timezone] => America/Los_Angeles
)
DateTime Object
(
    [date] => 2010-11-30 18:43:45
    [timezone_type] => 3
    [timezone] => America/Los_Angeles
)
DateTime Object
(
    [date] => 2010-11-30 18:43:44
    [timezone_type] => 3
    [timezone] => America/Los_Angeles
)

Note that using add() instead of sub() does NOT have the same effect.

This is particularly undesirable -- in this example you make a datetime, use sub() to make it a relative time in the past, and then date->diff() to confirm the difference. But the diff() inadvertendly makes the difference 2x.

 
show source | credits | stats | sitemap | contact | advertising | mirror sites