Как мне удалить 3 месяца с даты? - PullRequest
6 голосов
/ 15 августа 2011

Предположим, что дата:

$date = "2011-08-28";

Это нужно рассчитать за 3 месяца до $date - как это можно сделать?

Ответы [ 5 ]

15 голосов
/ 15 августа 2011
$new_timestamp = strtotime('-3 months', strtotime($date));

Затем вы можете использовать новую метку времени с функцией php date () для отображения новой даты, как вы хотите, например:

echo date("Y-m-d",$new_timestamp);
11 голосов
/ 15 августа 2011

Для меня этот способ намного лучше, потому что код более читабелен.

$datetime = Datetime::createFromFormat('Y-m-d', "2011-08-28");
$datetime->modify('-3 months');
echo $datetime->format('Y-m-d');

edit: я идиот.Вы можете сделать это следующим образом

$datetime = new Datetime("2011-08-28");
$datetime->modify('-3 months');
echo $datetime->format('Y-m-d');
3 голосов
/ 21 ноября 2014

edit: Как указывает calumbrodie, вы можете использовать метод sub вместо инвертирования интервала и добавления его к объекту даты


Я пытался что-то сделатьпохоже на оригинальный вопрос.Мне нужно было вычесть 1 день из объекта DateTime.Я знаю, что другие решения работают, но вот другой способ, который мне понравился больше.Я использовал эту функцию:

function getPreviousDay($dateObject){
    $interval = new DateInterval('P1D');
    $dateObject->sub($interval);
    return $dateObject;
}

$ dateObject - это объект DateTime, который может иметь любую дату, которую вы не хотите, но, поскольку я хотел текущую дату, я написал:

$dateObject = new DateTime('now');

Моя функция вычитает 1 день из полученной даты, но вы можете изменить ее, чтобы она вычитала 3 месяца, изменяя конструктор DateInterval следующим образом:

$interval = new DateInterval('P3M');
$dateObject->sub($interval);
return $dateObject;

Вы можете найти объяснение в формате строкииспользуется в конструкторе DateInterval здесь

документация конструктора DateInterval

Там вы увидите, что буква 'P' (точка) является обязательной, для использования вы используете intпродолжительность периода, а затем укажите тип периода, в случае месяцев «М».Похоже, что в документации произошла ошибка, в ней говорится, что « M » используется месяцами и минутами, но фактически работает месяцами.Если вам нужно использовать минуты, вы должны указать «PTM», например, «PT3M» на 3 минуты, за пределами таблицы указано, что вы должны использовать идентификатор «T» для временных интервалов.

edit: чтобы датьполный пример, вы должны использовать этот формат для полного интервала времени даты:

$format = 'P1Y2M4DT2H1M40S';

Это будет представлять интервал 1 год, 2 месяца, 4 дня, 2 часа, 1 минута и 40 секунд

Надеюсь, это кому-нибудь поможет

2 голосов
/ 15 августа 2011
<?php
$threemonthsago = mktime(0, 0, 0, date("m")-3, date("d"),   date("Y"));
?>
0 голосов
/ 15 августа 2011
<?php
$date = date_create('2000-01-01');
date_add($date, date_interval_create_from_date_string('10 days'));
echo date_format($date, 'Y-m-d');
?>
...