Как из сегодняшней даты вычесть 4 месяца?

Мне нужно объявить две даты в формате "Ymd": $toDate и $fromDate.

$toDate представляет сегодняшнюю дату, а $fromDate должно быть на 4 месяца раньше, чем сегодня.

$toDate = Date('Ymd');
$fromDate = ?

Как создать $fromDate?


person Jason94    schedule 12.11.2010    source источник


Ответы (2)


Используйте магию strtotime:

$fromDate = date("Ymd", strtotime("-4 months"));
person Pekka    schedule 12.11.2010
comment
сегодня, 31 декабря, я попробовал тот же код и попытался вычесть 1 месяц, как указано выше, он вернул мне дату 1 декабря 2012 года. Однако я ожидал 30 ноября. это ожидаемый результат или это ошибка? - person Mubashar; 31.12.2012
comment
@ Мубашар, я думаю, это так задумано! Оба подхода (ваш и strtotime), возможно, одинаково верны. - person Pekka; 31.12.2012

смотрите код ниже...

$fourmonthsback = date("Ymd", mktime(0, 0, 0, date("m")-4, date("d"),   date("Y")));

OR

$fourmonthsback = mktime(0, 0, 0, date("m")-4, date("d"),   date("Y"));
person Prabhu M    schedule 12.11.2010
comment
Это не будет работать в январе, феврале, марте или апреле, так как месяц будет либо 0, либо отрицательным. - person cypher; 12.11.2010
comment
@cypher - На самом деле mktime выполняет арифметику дат. Если вы установите для параметра месяца значение меньше 1, mktime выберет более ранний месяц. Если вы установите месяц равным 0, то mktime изменит всю дату на декабрь предыдущего года. Эта арифметика работает со всеми параметрами mktime, кроме часового пояса. - person emurano; 12.11.2010
comment
Действительно? Извините, тогда я этого не знал. - person cypher; 12.11.2010